Mybatis學習----動態SQL

動態sql

在這裏插入圖片描述

  • if元素
    if元素相當於Java中的if語句,它常常與test屬性聯合使用。現在我們要根據name去查找學生,但是name是可選的,如下所示:
<select id="selectByName" resultType="com.ankeetc.spring.domain.StudentDomain">
        SELECT * FROM student
        WHERE 1=1
        <if test="name != null and name != ''">
            AND name LIKE concat('%', #{name}, '%')
        </if>
  </select>
  • choose、when、otherwise元素
    有些時候我們還需要多種條件的選擇,在Java中我們可以使用switch、case、default語句,而在映射器的動態語句中可以使用choose、when、otherwise元素。
<!-- 有name的時候使用name搜索,沒有的時候使用id搜索 -->
    <select id="select" resultType="com.ankeetc.spring.domain.StudentDomain">
        SELECT * FROM student
        WHERE 1=1
        <choose>
            <when test="name != null and name != ''">
                AND name LIKE concat('%', #{name}, '%')
            </when>
            <when test="id != null">
                AND id = #{id}
            </when>
        </choose>
    </select>
  • where元素
    上面的select語句我們加了一個1=1的絕對true的語句,目的是爲了防止語句錯誤,變成SELECT * FROM student WHERE這樣where後沒有內容的錯誤語句。這樣會有點奇怪,此時可以使用<where>元素。
<select id="select" resultType="com.ankeetc.spring.domain.StudentDomain">
    SELECT * FROM student
    <where>
        <if test="name != null and name != ''">
            name LIKE concat('%', #{name}, '%')
        </if>
        <if test="title != null and titlr != ''">
            and lower(title) like lower(#{title})
        </if>
    </where>
</select>

<where>自動修補查詢條件,查詢語句中的where關鍵字使用<where>標籤替代
    注意:不能省略and 或 or關鍵字

  • set元素
    在update語句中,如果我們只想更新某幾個字段的值,這個時候可以使用set元素配合if元素來完成。注意:set元素遇到,會自動把,去掉。
<update id="update">
    UPDATE student
    <set>
        <if test="name != null">
            name = #{name},
        </if>
        <if test="sex != null">
            sex = #{sex}
        </if>
    </set>
    WHERE id = #{id}
</update>

        按需修改,修改指定的列,未指定的不修改
  • trim元素
    有時候我們要去掉一些特殊的SQL語法,比如常見的and、or,此時可以使用trim元素。trim元素意味着我們需要去掉一些特殊的字符串,prefix代表的是語句的前綴,而prefixOverrides代表的是你需要去掉的那種字符串,suffix表示語句的後綴,suffixOverrides代表去掉的後綴字符串。
<select id="select" resultType="com.ankeetc.spring.domain.StudentDomain">
    SELECT * FROM student
    <trim prefix="WHERE" prefixOverrides="AND">
        <if test="name != null and name != ''">
            AND name LIKE concat('%', #{name}, '%')
        </if>
        <if test="id != null">
            AND id = #{id}
        </if>
    </trim>
</select>
  • foreach元素
    foreach元素是一個循環語句,它的作用是遍歷集合,可以支持數組、List、Set接口。
<select id="select" resultType="com.ankeetc.spring.domain.StudentDomain">
    SELECT * FROM student
    WHERE name IN
    <foreach collection="list" open="(" close=")" separator="," item="item">
        #{item}
    </foreach>

collection配置的是傳遞進來的參數名稱,它可以是一個數組、List、Set等集合。
item配置的是循環中當前的元素。
openclose配置的是以什麼符號將這些集合包裝起來。
separator是各個元素的間隔符。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章