javascript
Spring Boot2.x-08Spring Boot2.1.2 整合 Mybatis1.3.2 + 通用Mapper2.1.4 + PageHelper1.2.10 + Druid 1.1.10
文章目錄
- 概述
- 整合 MyBatis
- 整合 通用Mapper2.1.4及 PageHelper1.2.10
- 添加依賴
- 通用mapper 編寫
- application.yml增加配置
- 集成驗證測試
- 整合Druid (純配置文件)
- 添加依賴
- application.yml增加配置
- 集成驗證測試
- 代碼
概述
通用Mapper: https://gitee.com/free/Mapper/wikis/Home
分頁插件 pagehelper: https://github.com/pagehelper/Mybatis-PageHelper/blob/master/wikis/zh/HowToUse.md
整合官方指導:https://github.com/abel533/MyBatis-Spring-Boot
不過版本較低,我們這里升級下Spring Boot等框架的版本,同時整合下阿里巴巴的Druid連接池 。
項目結構如下
整合 MyBatis
參考上篇博文 Spring Boot2.x-07Spring Boot2.1.2整合Mybatis
整合 通用Mapper2.1.4及 PageHelper1.2.10
添加依賴
既然是spring boot項目,肯定是添加xxx-starter了. 非Spring Boot項目可以添加單獨的jar包。
<!--通用Mapper插件 文檔地址:https://gitee.com/free/Mapper/wikis/Home 同pagehelper 同一個作者劉增輝大神開源 --> <dependency><groupId>tk.mybatis</groupId><artifactId>mapper-spring-boot-starter</artifactId><version>2.1.4</version> </dependency><!-- 分頁插件 pagehelper 文檔地址:https://github.com/pagehelper/Mybatis-PageHelper/blob/master/wikis/zh/HowToUse.md --> <dependency><groupId>com.github.pagehelper</groupId><artifactId>pagehelper-spring-boot-starter</artifactId><version>1.2.10</version> </dependency>通用mapper 編寫
package com.artisan.common;import tk.mybatis.mapper.common.Mapper; import tk.mybatis.mapper.common.MySqlMapper; /*** * @author yangshangwei** @param <T> 通用mapper 創建CommonMapper接口繼承Mapper* * * 通用 Mapper 是一個可以實現任意 MyBatis 通用方法的框架,項目提供了常規的增刪改查操作以及 Example 相關的單表操作。* 通用 Mapper 是為了解決 MyBatis 使用中 90% 的基本操作.* PageHelper則提供通用的分頁查詢功能,使用它們可以很方便的進行開發,可以節省開發人員大量的時間* * 通用Mapper的GIT地址: https://gitee.com/free/Mapper分頁插件的GIT地址: https://github.com/pagehelper/Mybatis-PageHelper* */ public interface CommonMapper<T> extends Mapper<T>, MySqlMapper<T> {}application.yml增加配置
#mappers 多個接口時逗號隔開 mapper: mappers: com.artisan.common.CommonMapper # 通用dao ,是個類,不是包名not-empty: false # 設置以后,會去判斷 insert 和 update 中字符串類型!=''identity: MYSQL#pagehelper pagehelper: # 配置使用哪種數據庫語言,不配置的話pageHelper也會自動檢測,這里使用的mysql。helper-dialect: mysql# 分頁合理化參數,默認值為false。當該參數設置為 true 時,pageNum<=0 時會查詢第一頁, pageNum>pages(超過總數時),會查詢最后一頁。默認false 時,直接根據參數進行查詢reasonable: true # 支持通過 Mapper 接口參數來傳遞分頁參數,默認值false,分頁插件會從查詢方法的參數值中,自動根據上面 params 配置的字段中取值,查找到合適的值時就會自動分頁supportMethodsArguments: true# 為了支持startPage(Object params)方法,增加了該參數來配置參數映射,用于從對象中根據屬性名取值, 可以配置 pageNum,pageSize,count,pageSizeZero,reasonable,不配置映射的用默認值,默認值為pageNum=pageNum;pageSize=pageSize;count=countSql;reasonable=reasonable;pageSizeZero=pageSizeZero。params: count=countSql集成驗證測試
注意看注釋,就不一一說明了。
package com.artisan.mapper;import java.util.List;import org.apache.ibatis.annotations.Mapper; import org.apache.ibatis.annotations.Select;import com.artisan.common.CommonMapper; import com.artisan.model.Artisan; /*** * @author yangshangwei* * 增加@Mapper這個注解之后,Spring 啟動時會自動掃描該接口,這樣就可以在需要使用時直接注入 Mapper 了* * 使用通用mapper,在Mapper接口層繼承剛才的CommonMapper接口,這樣單表的增刪改查就實現了,無須xml* * 當然了,可以使用內置通用mapper* * 也可以使用xml 或者注解*/@Mapper public interface ArtisanMapper extends CommonMapper<Artisan>{//自己來編寫xml,不適用內置的方法List<Artisan> selectAllArtisansByXml();//自己來注解,不適用內置的方法@Select("select id,name,sex from artisan")List<Artisan> selectAllArtisansByAnno(); }接口中的兩個方法是為了演示使用xml或者注解添加的方法,其實接口繼承CommonMapper<Artisan>就可以通過CommonMapper內置的方法實現對單表的CRUD了。
接下來我們來驗證下繼承CommonMapper內置的方法實現對單表的CRUD
service層
package com.artisan.service;import java.util.List;import com.artisan.model.Artisan;public interface ArtisanService {List<Artisan> getAllArtisanList();List<Artisan> getArtisanListByPage(int pageNum , int pageSize);}實現類
package com.artisan.service.impl;import java.util.List;import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service;import com.artisan.mapper.ArtisanMapper; import com.artisan.model.Artisan; import com.artisan.service.ArtisanService; import com.github.pagehelper.PageHelper; import com.github.pagehelper.PageInfo;import lombok.extern.slf4j.Slf4j;@Service @Slf4j public class ArtisanServiceImpl implements ArtisanService {@Autowiredprivate ArtisanMapper artisanMapper;/*** 調用 通用mapper提供的方法*/@Overridepublic List<Artisan> getAllArtisanList() {return artisanMapper.selectAll();}@Overridepublic List<Artisan> getArtisanListByPage(int pageNum, int pageSize) {// 分頁插件的使用 第一個參數是當前頁 第二個參數是每頁顯示的條數// 引用分頁插件以后,Mybatis分頁會變得特別簡單,// 需要注意的是,在你需要進行分頁的 MyBatis 查詢方法前調用 PageHelper.startPage 靜態方法即可,// 緊跟在這個方法后的第一個MyBatis 查詢方法會被進行分頁PageHelper.startPage(pageNum, pageSize).setOrderBy("id desc");List<Artisan> artisanList = artisanMapper.selectAll();// 需要注意的是查詢語句必須緊跟這一句,且只能使用一次,意思就是如果還有一個分頁查詢需要再定義一次PageHelper.startPage(pageNum, pageSize)// 用PageInfo對結果進行包裝,返回// PageInfo page = new PageInfo(artisanList);// PageInfo<Artisan> pageInfo = new PageInfo<Artisan>(artisanList);final PageInfo<Artisan> pageInfo = PageHelper.startPage(pageNum, pageSize).setOrderBy("id desc").doSelectPageInfo(() -> this.artisanMapper.selectAll());log.info("[lambda寫法] - [分頁信息] - [{}]", pageInfo.toString());PageHelper.startPage(pageNum, pageSize).setOrderBy("id desc");final PageInfo<Artisan> artisanPageInfo = new PageInfo<>(this.artisanMapper.selectAll());log.info("[普通寫法] - [{}]", artisanPageInfo);return artisanList;}}控制層
package com.artisan.controller;import java.util.List;import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.RestController;import com.artisan.model.Artisan; import com.artisan.result.CodeMsg; import com.artisan.result.Result; import com.artisan.service.ArtisanService;@RestController public class ArtisanController {@Autowiredprivate ArtisanService artisanService;// 正常情況@GetMapping("/artisans")public Result<List<Artisan>> selectAllArtisan() {return Result.success(artisanService.getAllArtisanList());}// 模擬異常情況@GetMapping("/artisansError")public Result<List<Artisan>> selectAllArtisanError() {return Result.error(CodeMsg.SERVER_ERROR);}// 分頁 http://localhost:8089/artisansPage?pageNum=2&pageSize=3@GetMapping("/artisansPage")public Result<List<Artisan>> selectPageArtisan(int pageNum, int pageSize) {return Result.success(artisanService.getArtisanListByPage(pageNum, pageSize));}}啟動spring boot ,訪問 http://localhost:8089/artisans (port在配置文件中指定為8089)
http://localhost:8089/artisansPage?pageNum=2&pageSize=3
當然了,也可以繼續使用xml或者注解來使用mybatis ,
mapper映射文件(xml方式時使用,注解就用不到了)
整合Druid (純配置文件)
添加依賴
<!--阿里巴巴數據源 --> <dependency><groupId>com.alibaba</groupId><artifactId>druid-spring-boot-starter</artifactId><version>1.1.10</version> </dependency>application.yml增加配置
spring:datasource:driver-class-name: com.mysql.cj.jdbc.Driver # JDBC連接Mysql6以上com.mysql.cj.jdbc.Driverurl: jdbc:mysql://localhost:3306/artisan?serverTimezone=UTC&useUnicode=true&characterEncoding=utf8&useSSL=falseusername: rootpassword: roottype: com.alibaba.druid.pool.DruidDataSourcedruid: # 下面為連接池的補充設置,應用到上面所有數據源中# 初始化大小,最小,最大initial-size: 5min-idle: 5max-active: 20max-wait: 60000 # 配置獲取連接等待超時的時間time-between-eviction-runs-millis: 60000 # 配置間隔多久才進行一次檢測,檢測需要關閉的空閑連接,單位是毫秒min-evictable-idle-time-millis: 300000 # 配置一個連接在池中最小生存的時間,單位是毫秒validation-query: SELECT 1 FROM DUALtest-while-idle: true # 當連接空閑時,是否執行連接測試test-on-borrow: false # 當從連接池借用連接時,是否測試該連接test-on-return: false # 在連接歸還到連接池時是否測試該連接# 打開PSCache,并且指定每個連接上PSCache的大小pool-prepared-statements: truemax-pool-prepared-statement-per-connection-size: 20# 配置監控統計攔截的filters,去掉后監控界面sql無法統計,'wall'用于防火墻 ,不能用log4j,不然報錯:Failed to bind properties under 'spring.datasource.druid' to javax.sql.DataSource:filters: stat,wall,slf4juse-global-data-source-stat: true# 通過connectProperties屬性來打開mergeSql功能;慢SQL記錄connect-properties: druid.stat.mergeSql=true;druid.stat.slowSqlMillis=5000# 配置監控服務器stat-view-servlet:login-username: artisanlogin-password: artisanreset-enable: falseurl-pattern: /druid/*# 添加IP白名單#allow:# 添加IP黑名單,當白名單和黑名單重復時,黑名單優先級更高#deny:web-stat-filter:# 添加過濾規則url-pattern: /*# 忽略過濾格式exclusions: "*.js,*.gif,*.jpg,*.png,*.css,*.ico,/druid/*"集成驗證測試
項目啟動的時候也可以看到初始化信息
監測頁面:http://ip:port/druid/index.html
因為這里配置了用戶名和密碼,先訪問 http://localhost:8089/druid/login.html
訪問幾次數據,然后就可以看到了
代碼
見github: https://github.com/yangshangwei/springbootMybatisCommonMapperAndPageheper
總結
以上是生活随笔為你收集整理的Spring Boot2.x-08Spring Boot2.1.2 整合 Mybatis1.3.2 + 通用Mapper2.1.4 + PageHelper1.2.10 + Druid 1.1.10的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Spring Boot2.x-07Spr
- 下一篇: Spring Boot2.x-09 基于