11 mybatis-高级应用
1 TypeHandler使用
MyBatis會用類型處理器將獲取的值以合適的方式轉換成 Java 類型。Mybatis默認為我們實現了許多TypeHandler, 當我們沒有配置指定TypeHandler時,Mybatis會根據參數或者返回結果的不同,默認為我們選擇合適的TypeHandler處理。
mybaits內置了很多TypeHandler,如下:
?
?
自定義一個TypeHandler需要繼承BaseTypeHandler類,并在配置文件中注冊和使用
<typeHandlers>
? <typeHandler handler="自定義TypeHandler"
????????????? javaType="XXX" jdbcType="VARCHAR"/>
</typeHandlers>
<resultMap>
??? <result property="id" column="id"/>
??? <result property="date" column="date" typeHandler="自定義TypeHandler"/>
</resultMap>
2 一對多映射
collection聚合:該方式效率較高,只需要執行一次sql
?
?
collection select嵌套:該方式效率較低,會執行多次sql查詢。對象之間的sql配置是分開的,可重用性較好。
?
3 緩存
Mybatis對緩存提供支持,但是在沒有配置的默認情況下,它只開啟一級緩存,一級緩存只是相對于同一個SqlSession而言,二級緩存是mapper級別的緩存,如下圖:
?
?
一級緩存:
(1) ?MyBatis在開啟一個數據庫會話時,會 創建一個新的SqlSession對象,SqlSession對象中會有一個新的Executor對象。Executor對象中持有一個新的PerpetualCache對象;當會話結束時,SqlSession對象及其內部的Executor對象還有PerpetualCache對象也一并釋放掉。不同的sqlSession之間的緩存數據區域(HashMap)是互相不影響的
(2) 同一個 SqlSession 對象, 在參數和 SQL 完全一樣的情況,多次查詢時會使用緩存。
二級緩存:
(1) 二級緩存是基于 mapper文件的namespace的,也就是說多個sqlSession可以共享一個mapper中的二級緩存區域,是Application級別的緩存。
(2) 二級緩存有全局和Mapper中的兩種開關配置,默認是關閉的。
(3) 二級緩存要求返回的模型類POJO是序列化的。
二級緩存的流程如下:
?
?
轉載于:https://www.cnblogs.com/lizhuxin/p/10745286.html
總結
以上是生活随笔為你收集整理的11 mybatis-高级应用的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: python note 11 函数名的使
- 下一篇: maven与eclipse连接的配置