SpringBoot圖文教程11—從此不寫mapper文件「SpringBoot集成MybatisPlus」
- 2020 年 3 月 5 日
- 筆記
有天上飛的概念,就要有落地的實現
概念十遍不如程式碼一遍,朋友,希望你把文中所有的程式碼案例都敲一遍
先贊後看,養成習慣
SpringBoot 圖文教程系列文章目錄
- SpringBoot圖文教程1「概念+案例 思維導圖」「基礎篇上」
- SpringBoot圖文教程2—日誌的使用「logback」「log4j」
- SpringBoot圖文教程3—「『初戀』情結」集成Jsp
- SpringBoot圖文教程4—SpringBoot 實現文件上傳下載
- SpringBoot圖文教程5—SpringBoot 中使用Aop
- SpringBoot圖文教程6—SpringBoot中過濾器的使用
- SpringBoot圖文教程7—SpringBoot攔截器的使用姿勢這都有
- SpringBoot圖文教程8 — SpringBoot集成MBG「程式碼生成器」
- SpringBoot圖文教程9—SpringBoot 導入導出 Excel 「Apache Poi」
- SpringBoot圖文教程10—模板導出|百萬數據Excel導出|圖片導出「easypoi」
前言
在使用Mybatis進行項目開發的時候,最繁瑣的事情就是實體類,dao介面,mapper.xml文件的編寫,幾乎每個表都需要對應寫一套,並且大部分的工作量都在最基本的增刪改查上。如果表中的欄位進行了修改,那麼實體類,mapper文件甚至dao介面都要進行修改。
在之前的文章中介紹了 MBG(Mybatis 程式碼生成器) 的使用,今天帶來更進一步的簡化Mybatis開發的工具 MybatisPlus,後續還會有 通用Mapper,總有一款適合你。
MybatisPlus
MybatisPlus 可以認為一個Mybatis的外掛,用了這個技術之後 可以不寫mapper文件 可以不寫dao介面中的方法 然後實現增刪改查 分頁查詢 條件查詢 等等
什麼是Mybatis Plus
MyBatis-Plus(簡稱 MP)是一個 MyBatis 的增強工具,在 MyBatis 的基礎上只做增強不做改變,為簡化開發、提高效率而生。
在 MyBatis 的基礎上只做增強不做改變
意味著 如果你導入了Mybatisplus的依賴 但是不想用Mybatisplus的方法 ,那麼 不會影響到Mybatis的正常使用
官方文檔:https://mp.baomidou.com/guide/crud-interface.html#page
MybatisPlus的使用
集成項目
-
導入Mybatisplus的依賴
注意:要首先刪除Mybatis的依賴,因為Mybatisplus中包含有Mybatis的依賴 不需要獨立導入 容易jar包衝突
<dependency> <groupId>com.baomidou</groupId> <artifactId>mybatis-plus-boot-starter</artifactId> <version>3.3.1.tmp</version> </dependency>
- 修改配置文件
通過MybatisPlus實現增刪改查
教程新手向,只講解Mybatis最常用,最基本的API,更多的操作請參考官方文檔
demo使用到的資料庫庫表如下
-
給要資料庫操作的實體類加Mybatisplus的註解
因為Mybatisplus不需要寫mapper文件 不需要寫sql 那麼Mybatisplus怎麼知道實體類和資料庫表映射關係(ORM) 通過註解表明這種關係
/** * @TableName("cmfz_admin") 將當前的實體類和資料庫的表建立聯繫 * 註解參數:表名 */ @TableName("cmfz_admin") @Data public class CmfzAdmin implements Serializable { /** * 主鍵屬性 @TableId * * value 該屬性對應的資料庫表中的欄位名 * type 主鍵自增的類型 AUTO 代表自動遞增 */ @TableId(value = "id",type = IdType.AUTO) private Integer id; /** * 非主鍵屬性 @TableField * @TableField("username") 參數為該屬性對應的資料庫表中的欄位名 * */ @TableField("username") private String username; @TableField("password") private String password; }
-
創建dao介面
import com.baizhi.entity.CmfzAdmin; import com.baomidou.mybatisplus.core.mapper.BaseMapper; /** * 注意: * 1.介面中不需要寫方法 * 2.介面需要繼承MybatisPlus中的類 BaseMapper 泛型為 當前dao對應的實體類 */ public interface CmfzAdminDao extends BaseMapper<CmfzAdmin> { }
-
直接使用Mybatisplus的方法 開始增刪改查
@Test public void contextLoads() { // 根據id查詢 CmfzAdmin cmfzAdmin = cmfzAdminDao.selectById(1); // System.out.println(cmfzAdmin); // 查詢所有 selectList(null); List<CmfzAdmin> cmfzAdmins = cmfzAdminDao.selectList(null); for (CmfzAdmin admin : cmfzAdmins) { System.out.println(admin); } } /** * 添加 */ @Test public void test1(){ // 創建一個對象 CmfzAdmin cmfzAdmin = new CmfzAdmin(); cmfzAdmin.setUsername("hhhh"); cmfzAdmin.setPassword("123456"); // 添加 返回值是成功的條數 int insert = cmfzAdminDao.insert(cmfzAdmin); System.out.println(insert); } /** * 將id為5的管理員名字修改為lisi */ @Test public void test2(){ CmfzAdmin cmfzAdmin = new CmfzAdmin(); cmfzAdmin.setId(5); cmfzAdmin.setUsername("lisi"); // 根據id更新數據 int i = cmfzAdminDao.updateById(cmfzAdmin); // 刪除 /** * deleteById() 根據id刪除 * deleteBatchIds() 批量刪除 參數是要刪除的id的集合 */ }
實現條件查詢 (條件構造器的使用)
/** * 要查詢名字有zhangsan的管理員的資訊 */ @Test public void test4(){ /** * selectOne 查詢一個方法 * * selectOne 需要一個Wrapper對象 實際上是需要一個條件 * * 條件是 查詢名字為zhangsan管理員 * sql where username = zhangsan * 需要 把 sql的條件 封裝到 Wrapper對象 對象中 * 將封裝了條件的對象 給 selectOne * * Wrapper對象 條件構造器 將sql的條件 寫入到Java對象中 * QueryWrapper 查詢條件構造器 * UpdateWrapper 更新的條件構造器 */ // 1.創建一個條件構造器 泛型 為要查詢數據的實體類類型 QueryWrapper<CmfzAdmin> queryWrapper = new QueryWrapper<>(); // 2.將 where username = zhangsan 等值查詢 這個條件封裝到 條件構造器 // username = zhangsan ---》 eq("username","zhangsan") 參數1 欄位名 參數2 要查詢的值 queryWrapper.eq("username","zhangsan"); // 3.通過條件構造器 查詢 CmfzAdmin cmfzAdmin = cmfzAdminDao.selectOne(queryWrapper); System.out.println(cmfzAdmin); } /** * 查詢 名字為 lisi 或者 密碼為 123456 的管理員 * * sql username = lisi or password = 123456 * * or 和 and 怎麼構建? * eq("id",1).or().eq("name","老王")--->id = 1 or name = '老王' */ @Test public void test5(){ // 1.創建條件構造器 QueryWrapper<CmfzAdmin> queryWrapper = new QueryWrapper<>(); // 2.構造條件 條件構造器的方法的第一個參數基本上都是欄位名 queryWrapper.eq("username","lisi").or().eq("password","123456"); // 3.查詢 /** * 批量查詢 selectList() 方法中如果參數是null 就是查詢所有 */ List<CmfzAdmin> cmfzAdmins = cmfzAdminDao.selectList(queryWrapper); for (CmfzAdmin cmfzAdmin : cmfzAdmins) { System.out.println(cmfzAdmin); } }
條件修改:把用戶名為zhangsan的管理員密碼修改為123456
/** * 用法和查詢類似 * 把用戶名為zhangsan的管理員密碼修改為123456 * */ @Test public void test6(){ // 1.創建條件構造器 UpdateWrapper<CmfzAdmin> updateWrapper = new UpdateWrapper<>(); // 2.構造條件 // where username = zhangsan // set password = 123456 updateWrapper.set("password","123123"); updateWrapper.eq("username","zhangsan"); // 3.使用方法修改 /** * update * 參數1 一個管理員對象 可以直接寫null * 參數2 條件構造器 */ cmfzAdminDao.update(null,updateWrapper); }
實現分頁查詢
-
配置分頁插件 配置在啟動類中即可
@Bean public PaginationInterceptor paginationInterceptor() { PaginationInterceptor paginationInterceptor = new PaginationInterceptor(); // 設置請求的頁面大於最大頁後操作, true調回到首頁,false 繼續請求 默認false // paginationInterceptor.setOverflow(false); // 設置最大單頁限制數量,默認 500 條,-1 不受限制 // paginationInterceptor.setLimit(500); // 開啟 count 的 join 優化,只針對部分 left join paginationInterceptor.setCountSqlParser(new JsqlParserCountOptimize(true)); return paginationInterceptor; }
-
直接在程式碼可以使用分頁查詢
/** * 測試分頁查詢 * * 獲取第二頁的數據(頁碼) 每頁顯示兩條(size) */ @Test public void test7(){ // 1.創建一個page對象 封裝分頁數據 /** * 創建對象的時候 直接寫入分頁數據 * 參數1 頁碼 * 參數2 每頁條數 */ Page<CmfzAdmin> adminPage = new Page<>(2,2); // 2.使用分頁查詢的方法 /** * 分頁查詢的方法 selectPage() * 參數1 IPage 分頁對象 封裝分頁資訊 封裝獲取第二頁的數據(頁碼) 每頁顯示兩條(size) * 參數2 條件構造器 可以直接寫null */ Page<CmfzAdmin> cmfzAdminPage = cmfzAdminDao.selectPage(adminPage, null); // 3.從Page對象中獲取查詢到的數據 /** * getRecords() 獲取查詢結果 * getTotal() 總條數 */ System.out.println("總條數:"+cmfzAdminPage.getTotal()); List<CmfzAdmin> adminList = cmfzAdminPage.getRecords(); for (CmfzAdmin cmfzAdmin : adminList) { System.out.println(cmfzAdmin); } }
總結
Tips:關於在SpringBoot項目中簡化Mybatis的開發,本教程提供三個技術 MBG,MybatisPlus,通用Mapper,總有一款適合你。
恭喜你完成了本章的學習,為你鼓掌!如果本文對你有幫助,請幫忙點贊,評論,轉發,這對作者很重要,謝謝。
讓我們再次回顧本文的學習目標
- 掌握SpringBoot中MybatisPlus的使用
要掌握SpringBoot更多的用法,請持續關注本系列教程。
求關注,求點贊,求轉發
歡迎關注本人公眾號:鹿老師的Java筆記,將在長期更新Java技術圖文教程和影片教程,Java學習經驗,Java面試經驗以及Java實戰開發經驗。