mybatis?plus實(shí)現(xiàn)分頁(yè)邏輯刪除
一、分頁(yè)
通過mybatis-plus實(shí)現(xiàn)分頁(yè),也是很簡(jiǎn)單,插件大法。
1、配置分頁(yè)插件
把分頁(yè)的插件也配置到統(tǒng)一的配置類里:
@Configuration // 配置掃描mapper的路徑 @MapperScan("com.pingguo.mpdemo.mapper") public class MpConfig { // 樂觀鎖插件 @Bean public OptimisticLockerInterceptor optimisticLockerInterceptor() { return new OptimisticLockerInterceptor(); } // 分頁(yè)插件 @Bean public PaginationInterceptor paginationInterceptor() { return new PaginationInterceptor(); } }
2、使用分頁(yè)
還是在測(cè)試類中增加測(cè)試方法,這里列了常用到的方法,后面配合前端頁(yè)面做分頁(yè)功能時(shí)候,都要用上。
// 測(cè)試分頁(yè) @Test void testPaging() { // 創(chuàng)建分頁(yè)對(duì)象,current為當(dāng)前頁(yè)數(shù),size為每頁(yè)最大記錄數(shù) Page<User> pageUser = new Page<>(1, 5); // 調(diào)用分頁(yè)查詢方法,傳入分頁(yè)對(duì)象-pageUser,wrapper是構(gòu)造條件對(duì)象,這里暫時(shí)寫null userMapper.selectPage(pageUser, null); System.out.println("當(dāng)前頁(yè):"+ pageUser.getCurrent()); System.out.println("當(dāng)前頁(yè)數(shù)據(jù)list集合:" + pageUser.getRecords()); System.out.println("每頁(yè)顯示記錄數(shù):" + pageUser.getSize()); System.out.println("總記錄數(shù):" + pageUser.getTotal()); System.out.println("總頁(yè)數(shù):" + pageUser.getPages()); System.out.println("是否有下一頁(yè):" + pageUser.hasNext()); System.out.println("是否有上一頁(yè):" + pageUser.hasPrevious()); }
目前數(shù)據(jù)表共12條數(shù)據(jù),運(yùn)行一下,對(duì)比下結(jié)果:
當(dāng)前頁(yè):1 當(dāng)前頁(yè)數(shù)據(jù)list集合:[User(id=2, name=修改名稱222, age=19, email=pingguotest1@pingguo.com, createTime=Thu Dec 24 23:27:20 CST 2020, updateTime=Thu Dec 24 23:27:23 CST 2020, version=null), User(id=3, name=wesson3, age=20, email=pingguotest1@pingguo.com, createTime=Wed Dec 23 23:27:32 CST 2020, updateTime=Thu Dec 24 23:27:36 CST 2020, version=null), User(id=4, name=daxiong, age=22, email=pingguotest1@pingguo.com, createTime=null, updateTime=Fri Dec 25 00:55:02 CST 2020, version=null), User(id=5, name=wesson5, age=20, email=pingguotest1@pingguo.com, createTime=null, updateTime=null, version=null), User(id=1342322873243996161, name=李白6, age=66, email=laowang@123.com, createTime=Fri Dec 25 12:14:47 CST 2020, updateTime=Fri Dec 25 15:43:11 CST 2020, version=2)] 每頁(yè)顯示記錄數(shù):5 總記錄數(shù):12 總頁(yè)數(shù):3 是否有下一頁(yè):true 是否有上一頁(yè):false
二、邏輯刪除
邏輯刪除并不是真正從數(shù)據(jù)表開刪除數(shù)據(jù)記錄,只是通過一個(gè)字段去標(biāo)識(shí)出這條記錄被刪除了,比如deleted
,0表示未刪除,1表示已刪除。
1、在數(shù)據(jù)表增加deleted字段。
2、實(shí)體類添加注解@TableLogic
在對(duì)應(yīng)實(shí)體類里增加屬性,并且加上@TableLogic
注解。為了方便,我還加了自動(dòng)填充。
@Data public class User { @TableId(type = IdType.ID_WORKER) private Long id; private String name; ... ... @TableLogic // 加上邏輯刪除注解 @TableField(fill = FieldFill.INSERT) //為了方便,加了自動(dòng)填充 private Integer deleted; }
3、自動(dòng)填充(非必須)
自動(dòng)填充的話,這里也需要增加:
@Component //此注解表示 將其交給spring去管理 public class MyMetaObjectHandler implements MetaObjectHandler { @Override public void insertFill(MetaObject metaObject) { this.setFieldValByName("createTime", new Date(), metaObject); this.setFieldValByName("updateTime", new Date(), metaObject); this.setFieldValByName("version", 0, metaObject); //為了第一次新增就設(shè)置版本值 this.setFieldValByName("deleted", 0, metaObject); //新增數(shù)據(jù)就默認(rèn)設(shè)置0 } }
4、application.properties 加入配置(非必須)
這里默認(rèn)情況下,刪除是1,沒刪除是0。
如果你想改成別的值,那么就要在application.properties 加入配置,換成你需要設(shè)置的值。
mybatis-plus.global-config.db-config.logic-delete-value=100 mybatis-plus.global-config.db-config.logic-not-delete-value=300
5、配置插件
@Configuration // 配置掃描mapper的路徑 @MapperScan("com.pingguo.mpdemo.mapper") public class MpConfig { // 樂觀鎖插件 @Bean public OptimisticLockerInterceptor optimisticLockerInterceptor() { return new OptimisticLockerInterceptor(); } ... ... // 邏輯刪除 @Bean public ISqlInjector sqlInjector() { return new LogicSqlInjector(); } }
6、試一試
因?yàn)橹暗臄?shù)據(jù),都沒有值,我手動(dòng)把id=2的設(shè)置了0,然后去刪除id=2的數(shù)據(jù)。
// 測(cè)試 邏輯刪除 @Test void testLogicDelete() { int result = userMapper.deleteById(2L); System.out.println(result); }
可以看到執(zhí)行的sql其實(shí)是個(gè)update
JDBC Connection [HikariProxyConnection@2144912729 wrapping com.mysql.cj.jdbc.ConnectionImpl@44c13103] will not be managed by Spring ==> Preparing: UPDATE user SET deleted=1 WHERE id=? AND deleted=0 ==> Parameters: 2(Long) <== Updates: 1 Closing non transactional SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@10f19647] 1
成功更新。
7、另外
MP查詢數(shù)據(jù)的時(shí)候會(huì)自動(dòng)過濾掉被邏輯刪除的數(shù)據(jù)的,不需要我們額外處理。
執(zhí)行查詢?cè)囋嚕?/p>
// 查詢 @Test void findAll() { List<User> users = userMapper.selectList(null); System.out.println(users); }
SELECT id,name,age,email,create_time,update_time,version,deleted FROM user WHERE deleted=0
以上就是mybatis plus實(shí)現(xiàn)分頁(yè)邏輯刪除的詳細(xì)內(nèi)容,更多關(guān)于mybatis plus分頁(yè)邏輯刪除的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
Feign+mybatisplus搭建項(xiàng)目遇到的坑及解決
這篇文章主要介紹了Feign+mybatisplus搭建項(xiàng)目遇到的坑及解決方案,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2023-03-03MybatisPlus?LambdaQueryWrapper使用int默認(rèn)值的坑及解決
這篇文章主要介紹了MybatisPlus?LambdaQueryWrapper使用int默認(rèn)值的坑及解決方案,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教。2022-01-01java如何實(shí)現(xiàn)嵌套對(duì)象轉(zhuǎn)大map(扁平化)
這篇文章主要介紹了java如何實(shí)現(xiàn)嵌套對(duì)象轉(zhuǎn)大map(扁平化),具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2022-10-10解決@PathVariable對(duì)于特殊字符截?cái)嗟膯栴}
這篇文章主要介紹了解決@PathVariable對(duì)于特殊字符截?cái)嗟膯栴},具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧2021-02-02SpringBoot框架實(shí)現(xiàn)切換啟動(dòng)開發(fā)環(huán)境和測(cè)試環(huán)境
這篇文章主要介紹了SpringBoot框架實(shí)現(xiàn)切換啟動(dòng)開發(fā)環(huán)境和測(cè)試環(huán)境,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2021-12-12Springboot啟動(dòng)后執(zhí)行方法小結(jié)
本文主要介紹了Springboot啟動(dòng)后執(zhí)行方法小結(jié),文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2023-04-04SpringBoot全局配置long轉(zhuǎn)String丟失精度問題解決方案
這篇文章主要介紹了SpringBoot全局配置long轉(zhuǎn)String丟失精度問題解決方案,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2020-08-08SpringBoot整合數(shù)據(jù)庫(kù)訪問層的實(shí)戰(zhàn)
本文主要介紹了SpringBoot整合數(shù)據(jù)庫(kù)訪問層的實(shí)戰(zhàn),主要包含JdbcTemplate和mybatis框架的整合應(yīng)用,具有一定的參考價(jià)值,感興趣的可以了解一下2022-03-03Java EasyExcel實(shí)現(xiàn)導(dǎo)出多sheet并設(shè)置單元格樣式
EasyExcel是一個(gè)基于Java的、快速、簡(jiǎn)潔、解決大文件內(nèi)存溢出的Excel處理工具,下面我們就來學(xué)習(xí)一下EasyExcel如何實(shí)現(xiàn)導(dǎo)出多sheet并設(shè)置單元格樣式吧2023-11-11