MyBatis로 항목 노트 (6) - 동적 SQL

(사용하는 것이다)

라벨의 경우

<if>테스트 속성 태그 속성 이름은 객체에 기록 된

매핑 설정 파일

<!-- 根据用户名和性别查询 -->
<select id="findUserByUserNameAndSex" parameterType="com.ben.domain.User" resultType="com.ben.domain.User">
    select * from user where 1=1
    <if test="username != null and username != ''">
        and username like '%${username}%'
    </if>
    <if test="sex != null and sex != ''">
        and sex = #{sex}
    </if>
</select>

지속성 계층 인터페이스

//根据用户名和性别查询
List<User> findUserByUserNameAndSex(User user);

테스트 파일

//根据用户名和性别查询
@Test
public void testFindUserByUserNameAndSex(){
    User user = new User();
    user.setUsername("王");
    List<User> users = userdao.findUserByUserNameAndSex(user);
    for(User u : users) {
        System.out.println(u);
    }
}

여기서 라벨

위의 조건 1 = 1, 우리가 사용할 수있는 어셈블리를 단순화하기 위해 <where>개발을 단순화하기 위해 태그를.

효과

  1. 자동으로 위치를 문 SQL 키워드를 추가
  2. 첫 번째 조건 및 키워드를 제거

매핑 설정 파일

<select id="findUserByUserNameAndSex" parameterType="com.ben.domain.User" resultType="com.ben.domain.User">
        select * from user
        <where>
            <if test="username != null and username != ''">
                and username like '%${username}%'
            </if>
            <if test="sex != null and sex != ''">
                and sex = #{sex}
            </if>
        </where>

    </select>

SQL 문은 동일합니다 :select * from user WHERE username like '%王%'

SQL 조각

SQL을 사용하여, 추출한 SQL을 복제 할 include궁극적 목적 SQL 재사용을 달성하기 참조.

<!--抽取重复的语句代码片段-->
<sql id="defaultsql">
    select * from user
</sql>
<!--    查询所有-->
<select id="findAll" resultType="com.ben.domain.User">
<include refid="defaultsql"></include>
</select>

<!-- 通过Id查询一个用户   -->
<select id="findUserById" parameterType="Integer" resultType="com.ben.domain.User">
    <include refid="defaultsql"></include>
    where id = #{v}
</select>

foreach는 태그

<foreach>태그 세트를 탐색하십시오.

특성 :

수집 : 요소의 모음, 대신에 통과 # 쓰기하지 않도록주의하는 {}

개방 : 명령문의 시작

가까운 : 최종 섹션

항목 : 얻어진 변수 이름의 컬렉션을 통해 각 요소

sperator : 구분

예를 들면 :

select * from user where id in(1,45,46,47,48)

표현을 해당 XML :


<select id="findByIds" parameterType="com.ben.domain.QueryVo" resultType="com.ben.domain.User">
    select * from user
    <where>
        <if test="ids != null and ids.size() > 0">
            <foreach collection="ids" open="id in ( " close=")" item="uid" separator=",">
                #{uid}
            </foreach>
        </if>
    </where>
</select>

테스트 클래스 작성 :

@Test
public void testFindByIds(){
    QueryVo vo = new QueryVo();
    List<Integer> ids = new ArrayList<Integer>();
    ids.add(1);
    ids.add(45);
    ids.add(46);
    ids.add(47);
    ids.add(48);
    vo.setIds(ids);
    //6.执行操作
    List<User> users = userdao.findByIds(vo);
    for(User user : users) {
        System.out.println(user);
    }
}

QueryVo 문구

package com.ben.domain;
import java.io.Serializable;
import java.util.List;

/**
 * @ClassName: QueryVo
 * @author: benjamin
 * @version: 1.0
 * @description: 查询条件对象
 * @createTime: 2019/07/15/17:35
 */

public class QueryVo implements Serializable {

    private User user;
    private List<Integer> ids;

    public List<Integer> getIds() {
        return ids;
    }

    public void setIds(List<Integer> ids) {
        this.ids = ids;
    }

    public User getUser() {
        return user;
    }

    public void setUser(User user) {
        this.user = user;
    }
}

추천

출처www.cnblogs.com/benjieqiang/p/11204283.html