Mybatis中的三個標籤

一。<where>標籤

1.複製上文工程,重命名爲Mybatis08工程,工程結構圖如下:

2.修改UserInfoMapper.xml,具體內容如下:

[html] view plain copy
 在CODE上查看代碼片派生到我的代碼片
  1. <select id="findUserInfoByUnoQuantity" parameterType="Map"  
  2.         resultMap="UserInfoResult">  
  3.         select * from userinfo  
  4.         <where>  
  5.             <if test="department!=null">  
  6.             <span style="white-space:pre">    </span>department like #{department}  
  7.             </if>  
  8.             <if test="gender!=null">  
  9.                 AND gender=#{gender}  
  10.             </if>  
  11.             <if test="position!=null">  
  12.                 AND position like #{position}  
  13.             </if>  
  14.         </where>  
  15.     </select>  
【解釋】
a.select之後沒有直接寫Sql語句的where,而是使用<where>標籤

b.按照標準寫法,第一個<if>標籤內的AND應該不寫,但是,就算開發中書寫也不會報錯。這就是where標籤幫助我們自動的移除了第一個AND鏈接。但是,第二個之後的<if>標籤內,必須有AND鏈接。

c.如果沒有一個條件符合,則返回所有條目。

d.<if>標籤的其他用法請參考前文,這裏不再贅述

3.修改單元測試方法,如下:

[java] view plain copy
 在CODE上查看代碼片派生到我的代碼片
  1. @Test  
  2.     public void testSeletOne() {  
  3.         try {  
  4.   
  5.             Map<String, Object> map = new HashMap<String, Object>();  
  6.             map.put("department""1");  
  7.             map.put("gender""1");  
  8.             map.put("position""工程師");  
  9.             Departments d = new Departments("2""%售%");  
  10.             map.put("d", d);  
  11.             UserInfoDao userInfo = sqlSession.getMapper(UserInfoDao.class);  
  12.             List<UserInfo> UIList = userInfo.findUserInfoByUnoQuantity(map);  
  13.             for (UserInfo ui : UIList) {  
  14.                 System.out.println(ui.toString());  
  15.             }  
  16.         } catch (Exception e) {  
  17.             e.printStackTrace();  
  18.         }  
  19.     }  
4.運行單元測試方法,觀察輸出即可。

5.結論:where 元素知道只有在一個以上的<if>條件有值的情況下才去插入“WHERE”子句。而且,若內容是“AND”或“OR”開頭的,where 元素也知道如何將他們去除。

--------------------------------------------------------------------------------------------------------------------------------------------------------

二.<trim>標籤

1.該標籤的功能與<where>類似,並且額外的提供了前綴後綴功能。具體用法如下:

2.修改Mapper文件,具體內容如下:

[html] view plain copy
 在CODE上查看代碼片派生到我的代碼片
  1. <select id="findUserInfoByTrim" parameterType="Map"  
  2.         resultMap="UserInfoResult">  
  3.         select * from userinfo  
  4.         <trim prefix="where" prefixOverrides="and|or">  
  5.             <if test="department!=null">  
  6.                 AND department like #{department}  
  7.             </if>  
  8.             <if test="gender!=null">  
  9.                 AND gender=#{gender}  
  10.             </if>  
  11.             <if test="position!=null">  
  12.                 AND position like #{position}  
  13.             </if>  
  14.         </trim>  
  15.     </select>  

【解釋】

a.我們使用<trim>替代<where>標籤。

b.屬性“prefix”表示:加入前綴where

c.屬性“prefixOverrides”表示:自動覆蓋第一個“and”或者“or”

d.後綴的用法類似;

3.增加對應接口,修改單元測試方法調用接口,如下:

[java] view plain copy
 在CODE上查看代碼片派生到我的代碼片
  1. @Test  
  2.     public void testSeletOne() {  
  3.         try {  
  4.   
  5.             Map<String, Object> map = new HashMap<String, Object>();  
  6.             map.put("department""1");  
  7.             map.put("gender""1");  
  8.             map.put("position""工程師");  
  9.             Departments d = new Departments("2""%售%");  
  10.             map.put("d", d);  
  11.             UserInfoDao userInfo = sqlSession.getMapper(UserInfoDao.class);  
  12.             List<UserInfo> UIList = userInfo.findUserInfoByTrim(map);  
  13.             for (UserInfo ui : UIList) {  
  14.                 System.out.println(ui.toString());  
  15.             }  
  16.         } catch (Exception e) {  
  17.             e.printStackTrace();  
  18.         }  
  19.     }  
4.運行單元測試方法,觀察控制檯輸出即可。
-------------------------------------------------------------------------------------------------------------------------------------

三。<set>標籤

1.注意:此標籤用於update語句。請各位看官注意觀察書寫方法。

2.修改Mapper文件,具體內容如下:

[html] view plain copy
 在CODE上查看代碼片派生到我的代碼片
  1. <update id="updateUserInfoBySet" parameterType="userInfo">  
  2.         update userInfo  
  3.         <set>  
  4.             <if test="mobile!=null">  
  5.                 mobile=#{mobile},  
  6.             </if>  
  7.             <if test="gender!=null">  
  8.                 gender=#{gender},  
  9.             </if>  
  10.             <if test="position!=null">  
  11.                 position = #{position},  
  12.             </if>  
  13.         </set>  
  14.         where userid=#{userid}  
  15.     </update>  
【解釋】

a.SQL語句的set被<set>標籤替代。

b.每個<if>中語句最後都帶有逗號,如果有寫過SQL語句的同學就一定知道,最後的逗號是不能有的,因此,這裏的<set>標籤能夠幫助我們自動的移除最後一個<if>中的逗號。

c.<trim>是一個非常強大的標籤,因此,我們也可以通過<trim>來實現<set>的功能,如下:【這種寫法的運行效果與<set>等價】

[html] view plain copy
 在CODE上查看代碼片派生到我的代碼片
  1. <update id="updateUserInfoBySet" parameterType="userInfo">  
  2.         update userInfo  
  3.         <trim prefix="SET" suffixOverrides=",">  
  4.             <if test="mobile!=null">  
  5.                 mobile=#{mobile},  
  6.             </if>  
  7.             <if test="gender!=null">  
  8.                 gender=#{gender},  
  9.             </if>  
  10.             <if test="position!=null">  
  11.                 position = #{position},  
  12.             </if>  
  13.         </trim>  
  14.         where userid=#{userid}  
  15.     </update>  

3.增加對應接口,修改單元測試方法調用接口,如下:

[java] view plain copy
 在CODE上查看代碼片派生到我的代碼片
  1. @Test  
  2.     public void testUpdate() {  
  3.         try {  
  4.   
  5.             UserInfo ui = new UserInfo("admin""3""經理""77778888","0""[email protected]"null);  
  6.             UserInfoDao userInfo = sqlSession.getMapper(UserInfoDao.class);  
  7.             int re = userInfo.updateUserInfoBySet(ui);  
  8.             if(re==1){  
  9.                 System.out.println("更新成功");  
  10.             }  
  11.             sqlSession.commit();  
  12.         } catch (Exception e) {  
  13.             e.printStackTrace();  
  14.         }  
  15.     }  
4.運行單元測試方法,觀察控制檯輸出即可
發佈了18 篇原創文章 · 獲贊 9 · 訪問量 9139
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章