MyBatis傳入引數與ParameterType總結(二)
mybatis的insert、update、delete、select中都提到了parameterType這個元素。
那麼,這麼愛上鏡的它究竟怎麼使用呢?聽我嘮嘮。
一、介面中的引數型別
我暫且分為三類:基本資料型別、POJO類、HashMap類
你也可以把POJO類和HashMap歸為複雜資料型別,均可。
二、接收引數的方式
a、#{引數} 預編譯型別
b、${} 非預編譯(直接引用sql拼接,但是不能防止sql注入)
基本資料型別只能傳入一個引數,一般使用 #{引數}獲取,複雜資料型別用 #{屬性名},map中則用#{key}獲取;
${} 去接收引數,在一個引數情況時,預設必須使用${value}獲取引數值
比如:UserDaoImpl.xml
<update id="updateUser" parameterType="cn.zgg.mybatis.pojo.User">
UPDATE tb_user
SET
user_name=#{userName},
password=#{password},
name=#{name},
age=#{age},
sex=#{sex},
birthday=#{birthday},
updated=NOW()
WHERE
(id=#{id});
</update>
java類:
/* * 修改使用者 */ public void updateUser(User user);
測試類:
@Test
public void testUpdateUser() {
User user = this.userDao.queryUserById(1l);
user.setAge(12);
user.setName("wyll");
this.userDao.updateUser(user);
}
總結:介面名與id值一致,引數型別是自定義包裝POJO類,這裡寫的是User類的全路徑。
三、註解
1)、mapper介面一般只接收一個引數,不過呢,你也可以通過使用@Param註解將多個引數繫結起來,作為一個map輸入引數;
2)、mapper藉口如何傳遞多個引數呢?
有兩種方式:
a 、預設規則獲取引數:{0,1,param1,param2}
b、使用@Param註解指定引數名(最佳方案)
這時,對映檔案就可以通過${}或者#{}對應引數名獲取引數
四、返回值型別
注意了注意了!!!
ResultMap 是MyBatis中最重要最強大的元素
為什麼這麼吹?
因為,它解決了兩大問題:POJO屬性名和表結構欄位名不一致的問題;
完成高階查詢:比如說:一對一、一對多、多對多。
當然了,駝峰命名法也是可以解決屬性和表結構不對應的問題的,只要在mabatis配置檔案加入
<setting name="mapUnderscoreToCamelCase" value="true"/>解決;
還有sql中使用別名,不過我本人不喜歡,因為懶嘍,嘿嘿。