1. 程式人生 > 實用技巧 >Mybatis_整合筆記02

Mybatis_整合筆記02

MyBatis-動態SQL

動態 SQL MyBatis 強大特性之一。極大的簡化我們拼裝 SQL 的操作。動態 SQL 元素和使用 JSTL 或其他類似基於 XML 的文字處理器相似。MyBatis 採用功能強大的基於 OGNL 的表示式來簡化操作。ifchoose (when, otherwise)trim (where, set)foreach

if

choose (when, otherwise)

trim (where, set)

where

set

trim

foreach

動態
SQL 的另外一個常用的必要操作是需要對一個集合進行遍歷,通常是在構建 IN 條件語句的時候

當迭代列表、集合等可迭代物件或者陣列 index 是當前 迭代的次數 item 的值是本次 迭代獲取的 元素當使用字典(或者 Map.Entry 物件的集合) index item

bind

bind 元素可以從 OGNL 表示式中建立一個變數並將其繫結到上下文。比如

Multi-db vendor support

若在 mybatis 配置檔案中配置了 databaseIdProvider , 則可以使用
_ databaseId 量, 這樣就可以根據不同的資料庫廠商構建特定的語句

OGNL Object Graph Navigation Language 物件圖導航語言,這是一種強大

表示式語言,通過它可以非常方便的來操作物件屬性。 類似於我們的ELSpEL

訪問集合偽屬性:

型別

偽屬性

偽屬性對應的 Java 方法

ListSetMap

sizeisEmpty

List/Set/Map.size(),List/Set/Map.isEmpty()

ListSet

iterator

List.iterator()Set.iterator()

Map

keysvalues

Map.keySet()Map.values()

Iterator

nexthasNext

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/falsetrue :只讀快取 ;會 給所有呼叫者返回快取物件的相同例項 因此這些物件不能被修改。這提供了很重要的效能 優勢。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.jarmybatis-ehcache-1.0.3.jar

slf4j-api-1.6.1.jarslf4j-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

3 、官方整合示例, jpetstore

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 的配置檔案(重要幾處配置)

1jdbcConnection配置資料庫連線資訊

2javaModelGenerator配置javaBean的生成策略

3sqlMapGenerator 配置sql對映檔案生成策略

4javaClientGenerator配置Mapper介面的生成策略

5table 配置要逆向解析的資料表

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

我們可以對照官方文件的說明,快速的使用外掛

使用步驟

1 、匯入相關包 pagehelper-x.x.x.jar jsqlparser-0.9.5.jar 2 、在 MyBatis 全域性配置檔案中配置分頁外掛 3 、使用 PageHelper 提供的方法進行分頁4 、可以使用更強大的 PageInfo 封裝返回 結果