1. 程式人生 > >Mybatis學習總結三(動態SQL)

Mybatis學習總結三(動態SQL)

mage pac png erl close poj inf per 學習總結

通過mybatis提供的各種標簽方法實現動態拼接sql。

一、if 和 where

 1 <select id="findUserList" parameterType="user" resultType="user">
 2         select * from user 
 3         <where>
 4         <if test="id!=null and id!=‘‘">
 5         and id=#{id}
 6         </if>
 7         <if test
="username!=null and username!=‘‘"> 8 and username like ‘%${username}%‘ 9 </if> 10 </where> 11 </select>

where能夠自動去掉第一個and


二、foreach

向sql傳遞數組或List,mybatis使用foreach解析,如下:

需求

傳入多個id查詢用戶信息,用下邊兩個sql實現:

SELECT * FROM USERS WHERE username LIKE ‘%張%‘ AND (id =10 OR id =89 OR id=16)

SELECT * FROM USERS WHERE username LIKE ‘%張%‘ id IN (10,89,16)

技術分享圖片

1 <if test="ids!=null and ids.size>0">
2             <foreach collection="ids" open=" and id in(" close=")" item="id" separator="," >
3                 #{id}
4             </foreach>
5 </if>

三、SQL片段

Sql中可將重復的sql提取出來,使用時用include引用即可,最終達到sql重用的目的,如下:

<!-- 傳遞pojo綜合查詢用戶信息 -->
    <select id="findUserList" parameterType="user" resultType="user">
        select * from user 
        <where>
        <if test="id!=null and id!=‘‘">
        and id=#{id}
        </if>
        <if test="username!=null and username!=‘‘">
        and username like ‘%${username}%‘
        </if>
        </where>
    </select>

<sql id="query_user_where">
    <if test="id!=null and id!=‘‘">
        and id=#{id}
    </if>
    <if test="username!=null and username!=‘‘">
        and username like ‘%${username}%‘
    </if>
</sql>

<!--使用include引用-->
<select id="findUserList" parameterType="user" resultType="user">
        select * from user 
        <where>
        <include refid="query_user_where"/>
        </where>
</select>

tips:如果引用其它mapper.xml的sql片段,則在引用時需要加上namespace,<include refid="namespace.sql片段”/>

Mybatis學習總結三(動態SQL)