Mybatis-Plus如何使用
前言:最近也在忙于學習公司的一些代碼,業務,這篇Mybatis-Plus是前幾天復習的,沒有太多的時間做下筆記,因此熬了一會兒,相當于又復習了一遍,以加深自己的印象和幫助到各位小伙伴兒們😉😉。
最近還會繼續更新,如果有什么需要改進的地方,還請大佬不吝賜教🤞🤞
小威在此先感謝諸佬了👏👏
文章目錄
- 🍓Mybatis-Plus自動填充
- 🍺實現樂觀鎖
- 🍵分頁查詢
- 🍹邏輯刪除
🏠個人主頁:小威要向諸佬學習呀
🧑個人簡介:大家好,我是小威,一個想要與大家共同進步的男人😉😉
目前狀況🎉:目前大二,在一家滿意的公司實習👏👏
🎁如果大佬在準備面試,找工作,刷算法,可以使用我找實習前用的刷題神器哦刷題神器點這里喲
💕歡迎大家:這里是CSDN,我總結知識的地方,歡迎來到我的博客,我親愛的大佬😘
牛客部分使用反饋,個人感覺還不錯,幫我找到了心儀的公司,希望各位伙伴兒們通過它也能提高不少🥂🥂🥂
以下正文開始
🍓Mybatis-Plus自動填充
在我們做項目的過程中經常會遇到一些數據,每次都使用相同的方式填充,例如記錄的創建時間,更新時間等。
我們可以選擇用普通的方法來自己填充,也可以使用MyBatis Plus的自動填充功能,完成這些字段的賦值工作。
因此我們兩個方法都介紹一遍。
首先用到我們上一篇的項目,我們需要給項目添加兩個字段,并且需要在數據庫中添加create_time,update_time字段。
private Date createTime; private Date updateTime;拿我們添加用戶的demo舉例,按照我們平常的做法,我們應該這樣做:
@Testpublic void insertUser(){System.out.println(("----- insert method test ------"));User user=new User();user.setName("wangWu");user.setId(8L);user.setAge(21);user.setCreateTime(new Date());user.setUpdateTime(new Date());user.setEmail("wangWU@qq.com");int result = userMapper.insert(user);System.out.println(result);}我們需要自己通過user對象設置CreateTime,UpdateTime屬性,這樣的方法當然可以運行的。
但是一旦所創建的對象比較多時,我們一直寫一些重復的代碼,會看起來很不舒服,因此,我們下面介紹如何通過Mybatis-Plus自動填充。
第一步,我們需要在實體類給對應的字段中添加相關的注解。
@TableField(fill = FieldFill.INSERT)private Date createTime;@TableField(fill = FieldFill.INSERT_UPDATE)private Date updateTime;上面的第一個注解,fill是填充的意思,也就是在插入數據的時候給表自動填充,第二個則是在插入和更新數據的時候自動填充。
但是,光有這些還不夠。我們應該自己設置一個類來進行配置。
實現元對象處理器接口
MetaObjectHandler接口是mybatisPlus提供給我們的一個擴展接口,我們可以利用這個接口在我們插入或者更新數據的時候,為一些字段指定默認值。
不要忘記添加 @Component 注解
啟動項目進行增添和修改測試,結果如下
🍺實現樂觀鎖
在我們進行大項目的開發時,訪問數據時不可能串行(one by one)地進行的,但如果多個人同時修改一個數據,可能最后一個數據會將前面的數據覆蓋掉,因此能夠使用樂觀鎖而不是悲觀鎖,Mybatis-Plus會基于版本號這樣做:
- 取出記錄時,獲取當前version
- 更新時,帶上這個version
- 執行更新時, set version = newVersion where version = oldVersion
- 如果version不對,就更新失敗
接下來我們來實現。
首先還是在實體類和數據庫中定義新字段:
ALTER TABLE `user` ADD COLUMN `version` INT在實體類中需要為版本號加上@Version注解,表示這個字段是版本號。
@Version @TableField(fill = FieldFill.INSERT) private Integer version;同時加上@TableField注解,在新增時定義版本號的默認值。
在handler類中配置
同時也需要在configuration配置類中進行配置
import com.baomidou.mybatisplus.extension.plugins.PaginationInterceptor; import org.mybatis.spring.annotation.MapperScan import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.transaction.annotation.EnableTransactionManagement; @EnableTransactionManagement //開啟事務注解 @Configuration @MapperScan("com.atguigu.mybatis_plus.mapper") public class MybatisPlusConfig {/*** 樂觀鎖插件*/@Beanpublic OptimisticLockerInterceptor optimisticLockerInterceptor() {return new OptimisticLockerInterceptor();} }編寫添加用戶數據和更新用戶數據的類
//增加用戶數據測試類@Testpublic void insertUser(){System.out.println(("----- insert method test ------"));User user=new User();user.setName("wangWu");user.setId(8L);user.setAge(21);// user.setCreateTime(new Date()); // user.setUpdateTime(new Date());user.setEmail("wangWU@qq.com");int result = userMapper.insert(user);System.out.println(result);}編寫更新數據測試類@Testpublic void testOptimisticLocker(){User user=userMapper.selectById(8L);//必須先查詢獲取version的值,然后再修改,version值才會有變化user.setAge(20);int i = userMapper.updateById(user);System.out.println(i);}需要注意的是:一定要先查詢對象的version值,才生效!如果直接進行updateById的話不會生效。
測試結果如下:
添加用戶,version值為1
修改用戶age為21,此時version+1變為了2。
🍵分頁查詢
Mybatis-Plus自帶分頁查詢的插件,不用編寫一些類,但需要我們簡單配置。
首先還是在我們的configuration配置類中配置:
//分頁的插件 @Bean public PaginationInterceptor paginationInterceptor() {return new PaginationInterceptor();配置完上面內容即可使用:
@Testpublic void testPage(){Page<User> page=new Page<>(2,3);//前面數據表示當前頁,后面數據表示每一頁顯示幾條數據。userMapper.selectPage(page,null);//查詢條件為空System.out.println(page.getCurrent());//獲取當前頁System.out.println(page.getRecords());//獲取每頁數據的list集合System.out.println(page.getSize());//每頁顯示記錄的條數System.out.println(page.getTotal());//總記錄數System.out.println(page.getPages());//總頁數System.out.println(page.hasNext());//是否有下一頁System.out.println(page.hasPrevious());//是否有上一頁}查詢結果如下:根據第一行的日志SQL語句,Mybatis-Plus在幫我們查詢時自帶了Limit關鍵字進行查詢。
🍹邏輯刪除
首先,需要知道什么是邏輯刪除:
物理刪除:真實刪除,直接將對應的數據從數據庫中刪除,之后查詢不到此條被刪除數據
邏輯刪除:假刪除,將對應的數據中代表是否被刪除字段狀態修改為“被刪除狀態”,一般用0和1表示,之后在數據庫中仍舊能看到此條數據記錄,存在有一個刪除字段,用0和1代表是否數據被刪除。
首先還是先在數據庫和實體類中添加字段
/*** @TableLogic 邏輯刪除注解*/@TableLogic@TableField(fill = FieldFill.INSERT)private Integer deleted; ALTER TABLE `user` ADD COLUMN `deleted` boolean然后跟上面的操作一樣,在handler類中進行配置
@Override public void insertFill(MetaObject metaObject) {//這里和上面的一樣,不寫了,占字數🤣。this.setFieldValByName("deleted", 0, metaObject);//表示deleted字段的默認值為0,在插入時字段填充字段值。 }同時,也可以在Properties或Ymal中對默認值進行設置。
mybatis-plus.global-config.db-config.logic-delete-value=1//刪除 mybatis-plus.global-config.db-config.logic-not-delete-value=0//沒有刪除舊版的還需要再配置類中添加配置:
@Bean public ISqlInjector sqlInjector() {return new LogicSqlInjector(); }首先我們先編寫,刪除一條記錄的代碼:
/*** 測試 邏輯刪除*/ @Test public void testLogicDelete() {int result = userMapper.deleteById(7L);System.out.println(result); }運行程序,查看控制臺語句:
我們經過測試后發現,數據并沒有被刪除,deleted字段的值由0變成了1
測試后分析打印的sql語句,是一條update
注意:被刪除數據的deleted 字段的值必須是 0,才能被選取出來執行邏輯刪除的操作
最后操作查詢所有字段的語句:
/*** 測試 邏輯刪除后的查詢:* 不包括被邏輯刪除的記錄*/ @Test public void testLogicDeleteSelect() {User user = new User();List<User> users = userMapper.selectList(null);users.forEach(System.out::println); }可以看出控制臺的SQL語句自動加上了deleted不為0的條件。
文章到這里就結束了,下篇我們將繼續介紹Mybatis-Plus的其他知識點,喜歡的大佬可以多多支持哦😉😉。
如果有什么疑問的地方請指出,諸佬們一起討論🍻🍻
最后再次給大家安利一波牛客,牛客真的很不錯的軟件,點擊刷題神器
注冊牛客,快來和博主一起刷題吧嘿嘿嘿👏
同時祝伙伴兒找到理想的工作及猛猛地提升算法能力哦😏
再次感謝各位小伙伴兒們的支持🤞
總結
以上是生活随笔為你收集整理的Mybatis-Plus如何使用的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: ensp 移动主机搜索不到AP信道_案例
- 下一篇: 列出所有的电影ID,名字和销售总额(以百