天天看點

MyBatis--動态sql之trim、where、set标簽

<trim>元素

<trim> 元素的主要功能是可以在自己包含的内容前加上某些字首,也可以在其後加上某些字尾,與之對應的屬性是 prefix 和 suffix。

可以把包含内容的首部某些内容覆寫,即忽略,也可以把尾部的某些内容覆寫,對應的屬性是 prefixOverrides 和 suffixOverrides。正因為 <trim> 元素有這樣的功能,是以也可以非常簡單地利用 <trim> 來代替 <where> 元素的功能。

示例:

1)添加 SQL 映射語句:

<!--使用trim元素根據條件動态查詢使用者資訊-->
<select id="selectUserByTrim" resultType="com.po.MyUser"parameterType="com.po.MyUser">
    select * from user
    <trim prefix="where" prefixOverrides = "and | or">
        <if test="uname!=null and uname!=''">
            and uname like concat('%',#{uname},'%')
        </if>
        <if test="usex!=null and usex!=''">
            and usex=#{usex}
        </if>
    </trim>
</select>
           

2)添加資料操作接口方法:

3)調用資料操作接口方法:

// 使用trim元素查詢使用者資訊
MyUser trimmu=new MyUser();
trimmu.setUname ("張");
trimmu.setUsex("男");
List<MyUser> listByTrim=userDao.selectUserByTrim(trimmu);
System.out.println ("trim 元素=========================");
for (MyUser myUser:listByTrim) {
    System.out.println(myUser);
}
           

<where> 元素

<where> 元素的作用是會在寫入 <where> 元素的地方輸出一個 where 語句,另外一個好處是不需要考慮 <where> 元素裡面的條件輸出是什麼樣子的,MyBatis 将智能處理。如果所有的條件都不滿足,那麼 MyBatis 就會查出所有的記錄,如果輸出後是以 and 開頭的,MyBatis 會把第一個 and 忽略。

當然如果是以 or 開頭的,MyBatis 也會把它忽略;此外,在 <where> 元素中不需要考慮空格的問題,MyBatis 将智能加上。

示例:

1)添加 SQL 映射語句:

<!--使用where元素根據條件動态查詢使用者資訊-->
<select id="selectUserByWhere" resultType="com.po.MyUser" parameterType="com.po.MyUser">
    select * from user
    <where>
        <if test="uname != null and uname ! = ''">
            and uname like concat('%',#{uname},'%')
        </if>
        <if test="usex != null and usex != '' ">
            and usex=#{usex}
        </if >
    </where>
</select>
           

2)添加資料操作接口方法:

3)調用資料操作接口方法:

// 使用where元素查詢使用者資訊
MyUser wheremu=new MyUser();
wheremu.setUname ("張");
wheremu.setUsex("男");
List<MyUser> listByWhere=userDao.selectUserByWhere(wheremu);
System.out.println ("where 元素=========================");
for (MyUser myUser:listByWhere) {
    System.out.println(myUser);
}
           

<set>元素

在動态 update 語句中可以使用 元素動态更新列。

示例:

1)添加 SQL 映射語句:

<!--使用set元素動态修改一個使用者-->
<update id="updateUserBySet" parameterType="com.po.MyUser">     
    update user
    <set>
        <if test="uname!=null">uname=#{uname}</if>
        <if test="usex!=null">usex=#{usex}</if>
    </set>
    where uid=#{uid}
</update>
           

2)添加資料操作接口方法:

3)調用資料操作接口方法:

// 使用set元素查詢使用者資訊
MyUser setmu=new MyUser();
setmu.setUid (1);
setmu.setUname("張九");
int setup=userDao.updateUserBySet(setmu);
System.out.println ("set 元素修改了"+setup+"條記錄");
System.out.println ("=========================")
           

繼續閱讀