Java java지도 시간 mybatis 동적 SQL 사용법 알아보기

mybatis 동적 SQL 사용법 알아보기

Jul 20, 2017 am 09:47 AM
mybatis 동적

MyBatis의 강력한 기능 중 하나는 동적 SQL입니다.

JDBC 또는 기타 유사한 프레임워크를 사용해 본 경험이 있다면 서로 다른 조건에 따라 SQL 문을 연결하는 것이 얼마나 고통스러운지 이해하게 될 것입니다. 접합 시 필요한 공백을 잊지 않도록 주의하고, 열 목록 끝에 쉼표를 생략하도록 주의하세요. 이러한 어려움을 완전히 없애려면 동적 SQL 기능을 활용하십시오.

일반적으로 동적 SQL을 사용하는 것은 독립적인 부분이 될 수 없습니다. MyBatis는 확실히 이러한 상황을 개선하기 위해 강력한 동적 SQL 언어를 사용합니다.

동적 SQL 요소는 JSTL 또는 기타 유사한 XML 기반 텍스트 프로세서를 사용하는 것과 유사합니다. 이전 버전의 MyBatis에서는 이해해야 할 요소가 많았습니다. MyBatis 3에서는 이러한 기능이 크게 향상되어 이제 원래 요소의 절반 미만을 사용할 수 있습니다. MyBatis는 강력한 OGNL 기반 표현식을 사용하여 다른 요소를 제거합니다.

Mybatis의 동적 SQL 문은 OGNL 표현식을 기반으로 합니다. 일반적으로 mybatis 동적 SQL 문에는 다음과 같은 범주가 포함됩니다.

1. if 문(단순 조건 판단)
2. 선택(when, otherwize) java 언어는 jstl에서 선택하는 것과 매우 유사합니다.
3. 트림(포함된 내용에 접두사, 접미사 등을 추가)
4. where(주로 SQL 문에서 where를 단순화하는 데 사용됨) , 지능적으로 처리할 수 있으며 중복 구문 오류에 대해 걱정할 필요가 없습니다.)
5. set(주로 업데이트에 사용됨)
6. foreach(특히 명령문 쿼리에서 mybatis를 구현할 때 유용함)
처리 방법은 다음과 같습니다.

1.mybaits if 문 처리

<select id="dynamicIfTest" parameterType="Blog" resultType="Blog">select * from t_blog where 1 = 1
        <if test="title != null">and title = #{title}</if>
        <if test="content != null">and content = #{content}</if>
        <if test="owner != null">and owner = #{owner}</if>
    </select>
로그인 후 복사

이 문의 의미는 매우 간단합니다. 제목 매개변수를 제공하는 경우에도 마찬가지로 title=#{title }을 충족해야 합니다. Content 및 Owner를 제공하는 경우 해당 조건을 충족해야 하며 이러한 조건을 충족하는 모든 블로그를 반환해야 합니다. 이는 과거에는 다른 유형의 프레임워크를 사용하거나 JDBC를 직접 사용하는 경우도 있습니다. 동일한 선택 효과를 얻으려면 SQL 문을 자세히 설명해야 하는데, 이는 매우 번거로운 작업입니다. 이에 비해 위의 동적 SQL은 훨씬 간단합니다. Java 언어로 전환하는 것과 같습니다 요소는 조건이 충족되면 내용이 출력됩니다. 조건이 충족되면 선택이 튀어 나오는 JAVA의 스위치와 유사합니다. all when 및 else 조건. 하나만 출력되고, 모든 조건이 충족되지 않으면 나머지의 내용이 출력됩니다. 따라서 위 명령문의 의미는 매우 간단합니다. title!=null이면 출력 및 titlte = #{title}이며, title이 비어 있고 content!=null이면 출력 및 content = #{content입니다. }, 모든 조건이 충족되지 않으면 그렇지 않은 경우의 내용이 출력됩니다.

3.trim (포함된 내용에 접두사, 접미사 등을 추가, 접두사, 접미사)

<select id="dynamicChooseTest" parameterType="Blog" resultType="Blog">select * from t_blog where 1 = 1 
        <choose>
            <when test="title != null">and title = #{title}</when>
            <when test="content != null">and content = #{content}</when>
            <otherwise>and owner = "owner1"
            </otherwise>
        </choose>
    </select>
로그인 후 복사

트림 요소의 주요 기능은 앞에 일정량을 추가하는 것입니다. 일부 접두사는 일부 접미사 뒤에 추가될 수 있으며 해당 속성은 접두사 및 접미사입니다. 포함된 콘텐츠의 헤더에 있는 일부 콘텐츠는 덮어쓸 수 있습니다. 즉, 꼬리의 일부 콘텐츠는 무시될 수 있습니다. 또한 속성은 prefixOverrides 및 suffixOverrides입니다.

4. where(주로 SQL 문에서 where 조건을 쉽게 판단하는 데 사용되며 및/또는 조건을 지능적으로 처리할 수 있습니다.

    <select id="dynamicTrimTest" parameterType="Blog" resultType="Blog">select * from t_blog <trim prefix="where" prefixOverrides="and |or">
            <if test="title != null">title = #{title}</if>
            <if test="content != null">and content = #{content}</if>
            <if test="owner != null">or owner = #{owner}</if>
        </trim>
    </select>
로그인 후 복사

where 元素知道只有在一个以上的if条件有值的情况下才去插入“WHERE”子句。而且,若最后的内容是“AND”或“OR”开头的,where 元素也知道如何将他们去除。

如果 where 元素没有按正常套路出牌,我们还是可以通过自定义 trim 元素来定制我们想要的功能。比如,和 where 元素等价的自定义 trim 元素为:


 ...

prefixOverrides 属性会忽略通过管道分隔的文本序列(注意此例中的空格也是必要的)。它带来的结果就是所有在 prefixOverrides 属性中指定的内容将被移除,并且插入 prefix 属性中指定的内容。

 

where元素的作用是会在写入where元素的地方输出一个where,另外一个好处是你不需要考虑where元素里面的条件输出是什么样子的,MyBatis会智能的帮你处理,如果所有的条件都不满足那么MyBatis就会查出所有的记录,如果输出后是and 开头的,MyBatis会把第一个and忽略,当然如果是or开头的,MyBatis也会把它忽略;此外,在where元素中你不需要考虑空格的问题,MyBatis会智能的帮你加上。像上述例子中,如果title=null, 而content != null,那么输出的整个语句会是select * from t_blog where content = #{content},而不是select * from t_blog where and content = #{content},因为MyBatis会智能的把首个and 或 or 给忽略。

5.set (主要用于更新时)

   <update id="dynamicSetTest" parameterType="Blog">update t_blog<set>
            <if test="title != null">title = #{title},</if>
            <if test="content != null">content = #{content},</if>
            <if test="owner != null">owner = #{owner}</if>
        </set>where id = #{id}</update>
로그인 후 복사

set元素主要是用在更新操作的时候,它的主要功能和where元素其实是差不多的,主要是在包含的语句前输出一个set,然后如果包含的语句是以逗号结束的话将会把该逗号忽略,如果set包含的内容为空的话则会出错。有了set元素我们就可以动态的更新那些修改了的字段。

6. foreach (在实现 mybatis in 语句查询时特别有用) 
foreach的主要用在构建in条件中,它可以在SQL语句中进行迭代一个集合。foreach元素的属性主要有item,index,collection,open,separator,close。item表示集合中每一个元素进行迭代时的别名,index指定一个名字,用于表示在迭代过程中,每次迭代到的位置,open表示该语句以什么开始,separator表示在每次进行迭代之间以什么符号作为分隔符,close表示以什么结束,在使用foreach的时候最关键的也是最容易出错的就是collection属性,该属性是必须指定的,但是在不同情况下,该属性的值是不一样的,主要有一下3种情况:
如果传入的是单参数且参数类型是一个List的时候,collection属性值为list
如果传入的是单参数且参数类型是一个array数组的时候,collection的属性值为array
如果传入的参数是多个的时候,我们就需要把它们封装成一个Map了,当然单参数也可以封装成map,实际上如果你在传入参数的时候,在MyBatis里面也是会把它封装成一个Map的,map的key就是参数名,所以这个时候collection属性值就是传入的List或array对象在自己封装的map里面的key

  1.1.单参数List的类型

<select id="dynamicForeachTest" resultType="Blog">select * from t_blog where id in<foreach collection="list" index="index" item="item" open="(" separator="," close=")">#{item}</foreach>
    </select>
로그인 후 복사

 

  上述collection的值为list,对应的Mapper是这样的:  public List dynamicForeachTest(List ids); 

  2.数组类型的参数

  

<select id="dynamicForeach2Test" resultType="Blog">select * from t_blog where id in<foreach collection="array" index="index" item="item" open="(" separator="," close=")">#{item}</foreach>
    </select>
로그인 후 복사

  对应的Mapper:   public List dynamicForeach2Test(int[] ids); 

  3.Map 类型的参数

<select id="dynamicForeach3Test" resultType="Blog">select * from t_blog where title like "%"#{title}"%" and id in<foreach collection="ids" index="index" item="item" open="(" separator="," close=")">#{item}</foreach>
    </select>
로그인 후 복사

  对应的Mapper:    public List dynamicForeach3Test(Map params);

 

위 내용은 mybatis 동적 SQL 사용법 알아보기의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.

핫 AI 도구

Undresser.AI Undress

Undresser.AI Undress

사실적인 누드 사진을 만들기 위한 AI 기반 앱

AI Clothes Remover

AI Clothes Remover

사진에서 옷을 제거하는 온라인 AI 도구입니다.

Undress AI Tool

Undress AI Tool

무료로 이미지를 벗다

Clothoff.io

Clothoff.io

AI 옷 제거제

Video Face Swap

Video Face Swap

완전히 무료인 AI 얼굴 교환 도구를 사용하여 모든 비디오의 얼굴을 쉽게 바꾸세요!

뜨거운 도구

메모장++7.3.1

메모장++7.3.1

사용하기 쉬운 무료 코드 편집기

SublimeText3 중국어 버전

SublimeText3 중국어 버전

중국어 버전, 사용하기 매우 쉽습니다.

스튜디오 13.0.1 보내기

스튜디오 13.0.1 보내기

강력한 PHP 통합 개발 환경

드림위버 CS6

드림위버 CS6

시각적 웹 개발 도구

SublimeText3 Mac 버전

SublimeText3 Mac 버전

신 수준의 코드 편집 소프트웨어(SublimeText3)

VirtualBox 고정 디스크를 동적 디스크로 또는 그 반대로 변환 VirtualBox 고정 디스크를 동적 디스크로 또는 그 반대로 변환 Mar 25, 2024 am 09:36 AM

가상 머신을 생성할 때 디스크 유형을 선택하라는 메시지가 표시되며 고정 디스크 또는 동적 디스크를 선택할 수 있습니다. 고정 디스크를 선택했지만 나중에 동적 디스크가 필요하다는 사실을 깨닫게 된다면 어떻게 될까요? 아니면 그 반대의 경우도 가능합니다. 이번 포스팅에서는 VirtualBox 고정 디스크를 동적 디스크로 또는 그 반대로 변환하는 방법을 살펴보겠습니다. 동적 디스크는 처음에는 크기가 작다가 가상 머신에 데이터를 저장함에 따라 크기가 커지는 가상 하드 디스크입니다. 동적 디스크는 필요한 만큼만 호스트 저장 공간을 차지하므로 저장 공간을 절약하는 데 매우 효율적입니다. 그러나 디스크 용량이 늘어나면 컴퓨터 성능이 약간 영향을 받을 수 있습니다. 고정 디스크와 동적 디스크는 일반적으로 가상 머신에서 사용됩니다.

MyBatis 동적 SQL 태그의 Set 태그 기능에 대한 자세한 설명 MyBatis 동적 SQL 태그의 Set 태그 기능에 대한 자세한 설명 Feb 26, 2024 pm 07:48 PM

MyBatis 동적 SQL 태그 해석: Set 태그 사용법에 대한 자세한 설명 MyBatis는 풍부한 동적 SQL 태그를 제공하고 데이터베이스 작업 명령문을 유연하게 구성할 수 있는 탁월한 지속성 계층 프레임워크입니다. 그 중 Set 태그는 업데이트 작업에서 매우 일반적으로 사용되는 UPDATE 문에서 SET 절을 생성하는 데 사용됩니다. 이 기사에서는 MyBatis에서 Set 태그의 사용법을 자세히 설명하고 특정 코드 예제를 통해 해당 기능을 보여줍니다. Set 태그란 무엇입니까? Set 태그는 MyBati에서 사용됩니다.

MyBatis 캐시 메커니즘에 대한 자세한 설명: 한 기사에서 캐시 저장 원리를 이해합니다. MyBatis 캐시 메커니즘에 대한 자세한 설명: 한 기사에서 캐시 저장 원리를 이해합니다. Feb 23, 2024 pm 04:09 PM

MyBatis 캐싱 메커니즘에 대한 자세한 설명: 한 기사에서 캐시 저장의 원리를 읽어보세요. 소개 MyBatis를 데이터베이스 액세스에 사용할 때 캐싱은 데이터베이스에 대한 액세스를 효과적으로 줄이고 시스템 성능을 향상시킬 수 있는 매우 중요한 메커니즘입니다. 이 기사에서는 캐시 분류, 저장 원칙 및 특정 코드 예제를 포함하여 MyBatis의 캐싱 메커니즘을 자세히 소개합니다. 1. 캐시 분류 MyBatis 캐시는 주로 1단계 캐시와 2단계 캐시의 두 가지 유형으로 구분됩니다. 첫 번째 수준 캐시는 SqlSession 수준 캐시입니다.

MyBatis 1차 캐시에 대한 자세한 설명: 데이터 액세스 효율성을 향상시키는 방법은 무엇입니까? MyBatis 1차 캐시에 대한 자세한 설명: 데이터 액세스 효율성을 향상시키는 방법은 무엇입니까? Feb 23, 2024 pm 08:13 PM

MyBatis 1차 캐시에 대한 자세한 설명: 데이터 액세스 효율성을 향상시키는 방법은 무엇입니까? 개발 과정에서 효율적인 데이터 액세스는 항상 프로그래머의 초점 중 하나였습니다. MyBatis와 같은 지속성 계층 프레임워크의 경우 캐싱은 데이터 액세스 효율성을 향상시키는 주요 방법 중 하나입니다. MyBatis는 두 가지 캐싱 메커니즘을 제공합니다: 첫 번째 수준 캐시와 두 번째 수준 캐시는 기본적으로 활성화됩니다. 이 기사에서는 MyBatis 1단계 캐시의 메커니즘을 자세히 소개하고 독자의 이해를 돕기 위해 구체적인 코드 예제를 제공합니다.

MyBatis의 배치 삽입 구현 원리에 대한 심층적인 이해 MyBatis의 배치 삽입 구현 원리에 대한 심층적인 이해 Feb 21, 2024 pm 04:42 PM

MyBatis는 다양한 Java 프로젝트에서 널리 사용되는 인기 있는 Java 지속성 계층 프레임워크입니다. 그중 일괄 삽입은 데이터베이스 작업의 성능을 효과적으로 향상시킬 수 있는 일반적인 작업입니다. 이번 글에서는 MyBatis에서 일괄 Insert의 구현 원리를 심층적으로 살펴보고 구체적인 코드 예제를 통해 자세히 분석해 보겠습니다. MyBatis의 일괄 삽입 MyBatis에서 일괄 삽입 작업은 일반적으로 동적 SQL을 사용하여 구현됩니다. 삽입된 여러 값을 포함하는 S를 구성하여

MyBatis Generator 구성 매개변수 해석 및 모범 사례 MyBatis Generator 구성 매개변수 해석 및 모범 사례 Feb 23, 2024 am 09:51 AM

MyBatisGenerator는 MyBatis에서 공식적으로 제공하는 코드 생성 도구로, 개발자가 데이터베이스 테이블 구조에 맞는 JavaBeans, Mapper 인터페이스 및 XML 매핑 파일을 빠르게 생성할 수 있도록 도와줍니다. 코드 생성을 위해 MyBatisGenerator를 사용하는 과정에서 구성 매개변수 설정이 중요합니다. 이 글은 구성 매개변수의 관점에서 시작하여 MyBatisGenerator의 기능을 깊이 탐구할 것입니다.

MyBatis의 캐싱 메커니즘 분석: 1단계 캐시와 2단계 캐시의 특성 및 사용량 비교 MyBatis의 캐싱 메커니즘 분석: 1단계 캐시와 2단계 캐시의 특성 및 사용량 비교 Feb 25, 2024 pm 12:30 PM

MyBatis 캐싱 메커니즘 분석: 1단계 캐시와 2단계 캐시의 차이점 및 적용 MyBatis 프레임워크에서 캐싱은 데이터베이스 작업 성능을 효과적으로 향상시킬 수 있는 매우 중요한 기능입니다. 그중 1단계 캐시와 2단계 캐시는 MyBatis에서 일반적으로 사용되는 두 가지 캐싱 메커니즘입니다. 이 기사에서는 1차 수준 캐시와 2차 수준 캐시의 차이점과 적용을 자세히 분석하고 설명할 구체적인 코드 예제를 제공합니다. 1. 레벨 1 캐시 레벨 1 캐시는 로컬 캐시라고도 하며 기본적으로 활성화되어 있으며 끌 수 없습니다. 첫 번째 수준 캐시는 SqlSes입니다.

보안 우선: MyBatis에서 SQL 주입을 방지하는 모범 사례 보안 우선: MyBatis에서 SQL 주입을 방지하는 모범 사례 Feb 22, 2024 pm 12:51 PM

네트워크 기술이 계속 발전함에 따라 데이터베이스 공격이 점점 더 일반화되고 있습니다. SQL 주입은 일반적인 공격 방법 중 하나입니다. 공격자는 입력 상자에 악의적인 SQL 문을 입력하여 불법적인 작업을 수행하여 데이터 유출, 변조, 심지어 삭제까지 유발합니다. SQL 주입 공격을 방지하기 위해 개발자는 코드를 작성할 때 특별한 주의를 기울여야 하며, MyBatis와 같은 ORM 프레임워크를 사용할 때는 시스템 보안을 보장하기 위해 몇 가지 모범 사례를 따라야 합니다. 1. 매개변수화된 쿼리 매개변수화된 쿼리는 안티-

See all articles