SpringBoot
是為了簡化Spring
應用的創建、運行、調試、部署等一系列問題而誕生的產物,自動裝配的特性讓我們可以更好的關注業務本身而不是外部的XML配置,我們只需遵循規范,引入相關的依賴就可以輕易的搭建出一個 WEB 工程
在一起來學SpringBoot | 第七篇:整合Mybatis一文中,我們介紹了Mybatis
這款優秀的框架,順便提及了民間大神開發的兩款插件(通用Mapper
、PageHelper
),從此告別簡單CURD代碼的編寫….
插件介紹
以下兩款插件作者均是同一個人,如果你想深入了解Mybatis
以及插件開發可以購買作者的書籍
分頁插件
在沒有分頁插件之前,寫一個分頁需要兩條SQL語句,一條查詢一條統計,然后才能計算出頁碼,這樣的代碼冗余而又枯燥,更重要的一點是數據庫遷移
,眾所周知不同的數據庫分頁寫法是不同的,而Mybatis
不同於Hibernate
的是它只提供動態SQL和結果集映射。值得慶幸的是,它雖然沒有為分頁提供良好的解決方案,但卻提供了Interceptor
以供開發者自己擴展,這也是這款分頁插件的由來….
通用Mapper
通用 Mapper
是一個可以實現任意 MyBatis
通用方法的框架,項目提供了常規的增刪改查操作以及 Example
相關的單表操作。通用 Mapper 是為了解決 MyBatis 使用中 90% 的基本操作,使用它可以很方便的進行開發,可以節省開發人員大量的時間。
導入依賴
在 pom.xml
中添加通用Mapper與分頁插件的依賴包
1 |
<!-- 通用Mapper插件 |
屬性配置
在 application.properties
文件中分別添加上數據庫
、Mybatis
、通用Mapper
、PageHelper
的屬性配置,這里只提供了常見場景的配置,更全的配置可以參考上文所述的文文檔(#^.^#)
1 |
spring.datasource.url=jdbc:mysql://localhost:3306/chapter7?useUnicode=true&characterEncoding=UTF-8&zeroDateTimeBehavior=convertToNull&allowMultiQueries=true&useSSL=false |
通用Mapper
- mapper.enum-as-simple-type: 枚舉按簡單類型處理,如果有枚舉字段則需要加上該配置才會做映射
- mapper.not-empty: 設置以后,會去判斷 insert 和 update 中符串類型!=’’
分頁插件
- pagehelper.reasonable: 分頁合理化參數,默認值為false。當該參數設置為 true 時,pageNum<=0 時會查詢第一頁, pageNum>pages(超過總數時),會查詢最后一頁。默認false 時,直接根據參數進行查詢。
- support-methods-arguments: 支持通過 Mapper 接口參數來傳遞分頁參數,默認值false,分頁插件會從查詢方法的參數值中,自動根據上面 params 配置的字段中取值,查找到合適的值時就會自動分頁。
注意事項
由於 mybatis.mapper-locations=classpath:com/battcn/mapper/*.xml
配置的在java package
中,而Spring Boot
默認只打入java package -> *.java
,所以我們需要給pom.xml
文件添加如下內容
1 |
<build> |
具體編碼
完成基本配置后,接下來進行具體的編碼操作。
表結構
創建一張 t_user
的表
1 |
CREATE TABLE `t_user` ( |
實體類
通用Mapper
采用了JPA規范包中的注解,這種的設計避免了重復造輪子,更是讓Spring Data Jpa
的應用可以輕松切換到Mybatis
1 |
package com.battcn.entity; |
持久層
為了更好的讓熟悉它,此處模擬了一個自定義的SQL,可以發現使用 通用Mapper
后並不會破壞原有代碼結構
UserMapper
繼承 BaseMapper<T>
就可以了,這點是不是有點類似 JpaRepository
,同時也可以根據自己需要擴展出更適合自己項目的BaseMapper
,它的靈活也是眾多開發者喜愛的因素之一
1 |
package com.battcn.mapper; |
UserMapper
映射文件
1 |
<?xml version="1.0" encoding="UTF-8" ?> |
測試
完成數據訪問層接口后,編寫一個junit
測試類來檢驗代碼的正確性。
1 |
package com.battcn; |