Mybatis_整合筆記02
MyBatis-動態SQL
• 動態 SQL 是 MyBatis 強大特性之一。極大的簡化我們拼裝 SQL 的操作。 • 動態 SQL 元素和使用 JSTL 或其他類似基於 XML 的文字處理器相似。 • MyBatis 採用功能強大的基於 OGNL 的表示式來簡化操作。 – if – choose (when, otherwise) – trim (where, set) – foreachif
choose (when, otherwise)
trim (where, set)
where
set
trim
foreach
• 動態bind
•bind 元素可以從 OGNL 表示式中建立一個變數並將其繫結到上下文。比如:
Multi-db vendor support
• 若在 mybatis 配置檔案中配置了 databaseIdProvider , 則可以使用OGNL( Object Graph Navigation Language )物件圖導航語言,這是一種強大的
表示式語言,通過它可以非常方便的來操作物件屬性。 類似於我們的EL,SpEL等
訪問集合偽屬性:
型別 | 偽屬性 | 偽屬性對應的 Java 方法 |
List、Set、Map | size、isEmpty | List/Set/Map.size(),List/Set/Map.isEmpty() |
List、Set | iterator | List.iterator()、Set.iterator() |
Map | keys、values | Map.keySet()、Map.values() |
Iterator | next、hasNext | Iterator.next()、Iterator.hasNext() |
MyBatis-快取機制
• MyBatis 包含一個非常強大的查詢快取特性 , 它可以非常方便地配置和定製 。快取 可以極大的提升查詢效率 。 • • MyBatis 系統中預設定義了兩級快取 。 • 一級 快取 和 二級快取 。 – 1 、預設情況下,只有一級快取( SqlSession 級別的快取,也稱為本地快取)開啟。 – 2 、二級快取需要手動開啟和配置,他是基於 namespace 級別的快取。 – 3 、為了提高擴充套件性。 MyBatis 定義了快取介面 Cache 。我們可以通過實現 Cache 介面來自定義二級快取一級快取
• 一級快取 (local cache), 即 本地快取 , 作用域預設 為 sqlSession 。當 Session flush 或 close 後 , 該 Session 中的所有 Cache 將被清空。 • 本地快取不能被關閉 , 但可以呼叫 clearCache () 來清空本地快取 , 或者改變快取的作用域 . • 在 mybatis3.1 之後 , 可以配置本地快取的作用域 . 在 mybatis.xml 中配置一級快取演示&失效情況
• 同一次會話期間只要查詢過的資料都會儲存在當前 SqlSession 的一個 Map 中 • key:hashCode + 查詢的 SqlId + 編寫的 sql 查詢語句 + 引數 • • 一級快取失效的四種情況 – 1 、不同 的 SqlSession 對應不同的一級快取 – 2 、同一個 SqlSession 但是查詢條件不同 – 3 、同一個 SqlSession 兩次查詢期間執行了任何一次增刪改操作 – 4 、同一個 SqlSession 兩次查詢期間手動清空了 快取二級快取
• 二級快取 (second level cache) ,全域性作用域快取 • 二級快取預設不開啟,需要手動配置 • MyBatis 提供二級快取的介面以及實現,快取實現要求 POJO 實現 Serializable 介面 • 二級快取在 SqlSession 關閉或提交 之後才會 生效 • • 使用步驟 – 1 、全域性配置檔案中開啟 二級 快取 • <setting name= " cacheEnabled " value="true"/> – 2 、需要使用二級快取的對映檔案處使用 cache 配置快取 • <cache /> – 3 、注意: POJO 需要實現 Serializable 介面快取相關屬性
• eviction=“ FIFO” : 快取回收策略: • LRU – 最近最少使用的:移除最長時間不被使用的物件。 • FIFO – 先進先出:按物件進入快取的順序來移除它們。 • SOFT – 軟引用:移除基於垃圾回收器狀態和軟引用規則的物件。 • WEAK – 弱引用:更積極地移除基於垃圾收集器狀態和弱引用規則的物件。 • 預設的是 LRU 。 • flushInterval : 重新整理間隔,單位毫秒 • 預設情況是不設定,也就是沒有重新整理間隔,快取僅僅呼叫語句時 重新整理 • s ize : 引用數目,正整數 • 代表快取最多可以儲存多少個物件,太大容易導致記憶體溢位 • readOnly : 只讀, true/false • true :只讀快取 ;會 給所有呼叫者返回快取物件的相同例項 。 因此這些物件不能被修改。這提供了很重要的效能 優勢。 • false :讀寫快取; 會返回快取物件的拷貝(通過序列化)。這會慢一些,但是安全,因此預設是 false 。快取有關設定
• 1 、全域性 setting 的 cacheEnable : – 配置 二級快取的開關。一級快取一直是開啟的 。 • 2 、 select 標籤的 useCache 屬性: – 配置 這個 select 是否使用二級快取。一級快取一直是使用 的 • 3 、 sql 標籤的 flushCache 屬性: – 增刪 改預設 flushCache =true 。 sql 執行以後,會同時清空一級和 二級 快取。查詢預設 flushCache =false 。 • 4 、 sqlSession. clearCache () : – 只是 用來清除一級快取 。 • 5 、 當在某一個作用域 ( 一級快取 Session/ 二級快取 Namespaces) 進行了 C/U/D 操作後,預設該作用域下 所有 select 中的快取將被 clear 。第三方快取整合
• EhCache 是一個純 Java 的程序內快取框架,具有快速、精幹等特點 ,是 Hibernate 中預設的 CacheProvider 。 • MyBatis 定義了 Cache 介面方便我們進行自定義擴充套件。 • 步驟: – 1 、匯入 ehcache 包,以及整合包,日誌包ehcache-core-2.6.8.jar、mybatis-ehcache-1.0.3.jar
slf4j-api-1.6.1.jar、slf4j-log4j12-1.6.2.jar
– 2 、編寫 ehcache.xml 配置檔案 – 3 、配置 cache 標籤 – <cache type= " org.mybatis.caches.ehcache.EhcacheCache "></cache> • 參照快取: 若想在名稱空間中共享相同的快取配置和例項。可以使用 cache-ref 元素來引用另外一個快取。MyBatis-Spring整合
1、檢視不同MyBatis版本整合Spring時使用的適配包; http://www.mybatis.org/spring/
2、下載整合適配包
https://github.com/mybatis/spring/releases
MyBatis-Spring | MyBatis | Spring |
1.0.0 and 1.0.1 | 3.0.1 to 3.0.5 | 3.0.0 or higher |
1.0.2 | 3.0.6 | 3.0.0 or higher |
1.1.0 or higher | 3.1.0 or higher | 3.0.0 or higher |
1.3.0 or higher | 3.4.0 or higher | 3.0.0 or higher |
https://github.com/mybatis/jpetstore-6
整合關鍵配置
MyBatis-逆向工程
• MyBatis Generator : • 簡稱 MBG ,是一個專門為 MyBatis 框架 使用者定製的 程式碼生成器 ,可以快速的根據表生成對應的對映檔案,介面,以及 bean 類。支援基本的增刪改查,以及 QBC 風格的條件查詢。但是表連線、儲存過程等這些複雜 sql 的定義需要我們手工編寫 • 官方文件 地址http://www.mybatis.org/generator/
• 官方工程 地址https://github.com/mybatis/generator/releases
MBG使用
• 使用步驟: – 1 )編寫 MBG 的配置檔案(重要幾處配置)1)jdbcConnection配置資料庫連線資訊
2)javaModelGenerator配置javaBean的生成策略
3)sqlMapGenerator 配置sql對映檔案生成策略
4)javaClientGenerator配置Mapper介面的生成策略
5)table 配置要逆向解析的資料表
tableName:表名
domainObjectName:對應的javaBean名
– 2 )執行程式碼生成器生成 程式碼 • 注意:Context標籤
targetRuntime=“MyBatis3“可以生成帶條件的增刪改查
targetRuntime=“MyBatis3Simple“可以生成基本的增刪改查
如果再次生成,建議將之前生成的資料刪除,避免xml向後追加內容出現的問題。
MBG配置檔案
生成器程式碼
測試查詢:
QBC風格的帶條件查詢
擴充套件:MyBatis實用場景
PageHelper外掛進行分頁
• PageHelper 是 MyBatis 中非常方便的第三方分頁外掛。 • 官方文件 :https://github.com/pagehelper/Mybatis-PageHelper/blob/master/README_zh.md
• 我們可以對照官方文件的說明,快速的使用外掛