SQL映射文件的幾個頂級元素:
mapper : 映射文件的根元素節點 只有一個屬性namespace(命名空間)
作用:用於區分不同的mapper ,全局唯一
綁定DAO接口,即面向接口編程 ,namespace的命名必須要跟接口同名。
cache: 配置給定命名空間的緩存
cache-ref: 從其他命名空間引用緩存配置
resultMap: 用來描述數據庫結果集和對象的對應關系。
sql : 可以重用的SQL塊,也可以被其他語句引用。
insert: 映射插入語句。
update : 映射更新語句
delete: 映射刪除語句
select: 映射查詢語句
namespace的命名必須跟某個DAO接口同名,同屬於DAO層 包下,習慣命名以 實體類+Mapper.xml命名。
接口中的方法名與映射文件中的SQL語句id應一一對應
使用select完成 單條件模糊查詢
<select id="getUserListByUserName" resultType="User" parameterType="string">
select * from smbms_user where userName like CONCAT ('%',#{userName},'%')
<select>
id為 getUserListByUserName 的映射語句,參數類型為 string 返回結果類型是User; 數據庫的字段名和屬性名不一致的情況下需要手動映射
id: 命名空間中唯一的標識符,可以被用來引用這條語句。
parameterType: 表示查詢語句傳入參數的類型的完全限定名或別名。
MyBatis多參數入參有三種方式:
1.將查詢條件封裝成對象進行入參 parameterType="User 類對象"
2. 使用Map集合 存儲查詢條件 parameterType="Map" 返回集合
3. 使用@Param注解實現多參數入參 : public int updatePwd(@Param("id")Integer id,@param("userPassword") String pwd);
使用resultMap完成查詢結果的展現
resultType 直接表示返回類型,包括基礎數據類型和復雜數據類型。
resultMap 是對外部resultMap定義的引用,對應外部resultMap的id,表示返回結果映射到哪一個resultMap上,應用場景一般是:數據庫字段信息與對象屬性不一致或者需要做復雜的聯合查詢以便自由控制映射結果。
resultType 屬性和 resultMap 屬性絕對不能同時存在,只能二者選其以使用。
使用insert完成增加操作
insert ,update ,delete 增,改,刪,默認返回執行sql影響的行數,所以DAO層的接口方法的返回值一直設置為int類型,
insert,update,delete 元素中均沒有resultType屬性,只有查詢操作需要對返回結果類型,進行相應的指定
MyBatis中參數入參,何時需要封裝成對象入參,何時又需要使用多參數入參?
一般情況下,超過4個以上的參數最好封裝成對象入參(特別是在常規的增加和修改操時字段較多,封裝成對象比較方便)
使用resultMap實現高級結果映射
1.association : 映射到JavaBean的某個 復雜類型 屬性 僅處理一對一的關聯關系
association的屬性:javaType:完整java類名或者別名
property:映射數據庫列的實體對象的屬性
2. collection 這個屬性是應該集合列表
resultMap自動映射級別和MyBatis緩存
<settings>
<setting name="autoMapperinigBehavior" value="FULL"/> //設置resultMap的自動映射級別為FULL(自動匹配所有)
</settings>
NONE : 禁止自動匹配
PARTIAL (默認): 自動匹配所有屬性
FULL: 自動匹配所有
MyBatis緩存
1.一級緩存
一級緩存是基於PerpetualCache( MyBatis自帶) 的HashMap本地緩存,作用范圍為session域內當session flush 或者 close之后,該session中所有的cache就會被清空。
2. 二級緩存
二級緩存就是global caching 它超出session范圍之外,可以被所有sqlSession共享,開啟它只需要在MyBatis的核心配置文件 settings 中設置即可