mybatis plus实现分页逻辑删除

 更新时间:2022年05月27日 11:25:38   作者:把苹果咬哭的测试笔记  
这篇文章主要为大家介绍了mybatis plus实现分页逻辑删除的方式详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪

一、分页

通过mybatis-plus实现分页,也是很简单,插件大法。

1、配置分页插件

把分页的插件也配置到统一的配置类里:

@Configuration
// 配置扫描mapper的路径
@MapperScan("com.pingguo.mpdemo.mapper")
public class MpConfig {
    // 乐观锁插件
    @Bean
    public OptimisticLockerInterceptor optimisticLockerInterceptor() {
        return new OptimisticLockerInterceptor();
    }
   // 分页插件
    @Bean
    public PaginationInterceptor paginationInterceptor() {
        return new PaginationInterceptor();
    }
}

2、使用分页

还是在测试类中增加测试方法,这里列了常用到的方法,后面配合前端页面做分页功能时候,都要用上。

    //  测试分页
    @Test
    void testPaging() {
        // 创建分页对象,current为当前页数,size为每页最大记录数
        Page<User> pageUser = new Page<>(1, 5);
        // 调用分页查询方法,传入分页对象-pageUser,wrapper是构造条件对象,这里暂时写null
        userMapper.selectPage(pageUser, null);
        System.out.println("当前页:"+ pageUser.getCurrent());
        System.out.println("当前页数据list集合:" + pageUser.getRecords());
        System.out.println("每页显示记录数:" + pageUser.getSize());
        System.out.println("总记录数:" + pageUser.getTotal());
        System.out.println("总页数:" + pageUser.getPages());
        System.out.println("是否有下一页:" + pageUser.hasNext());
        System.out.println("是否有上一页:" + pageUser.hasPrevious());
    }

目前数据表共12条数据,运行一下,对比下结果:

当前页:1
当前页数据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)]
每页显示记录数:5
总记录数:12
总页数:3
是否有下一页:true
是否有上一页:false

二、逻辑删除

逻辑删除并不是真正从数据表开删除数据记录,只是通过一个字段去标识出这条记录被删除了,比如deleted,0表示未删除,1表示已删除。

1、在数据表增加deleted字段。

2、实体类添加注解@TableLogic

在对应实体类里增加属性,并且加上@TableLogic注解。为了方便,我还加了自动填充。

@Data
public class User {
    @TableId(type = IdType.ID_WORKER)
    private Long id;
    private String name;
    ... ...
    @TableLogic   // 加上逻辑删除注解
    @TableField(fill = FieldFill.INSERT) //为了方便,加了自动填充
    private Integer deleted;
}

3、自动填充(非必须)

自动填充的话,这里也需要增加:

@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); //为了第一次新增就设置版本值
        this.setFieldValByName("deleted", 0, metaObject); //新增数据就默认设置0
    }
}

4、application.properties 加入配置(非必须)

这里默认情况下,删除是1,没删除是0。
如果你想改成别的值,那么就要在application.properties 加入配置,换成你需要设置的值。

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、试一试

因为之前的数据,都没有值,我手动把id=2的设置了0,然后去删除id=2的数据。

     // 测试 逻辑删除
    @Test
     void testLogicDelete() {
        int result = userMapper.deleteById(2L);
        System.out.println(result);
    }

可以看到执行的sql其实是个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查询数据的时候会自动过滤掉被逻辑删除的数据的,不需要我们额外处理。
执行查询试试:

    //    查询
    @Test
     void findAll() {
        List&lt;User&gt; 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实现分页逻辑删除的详细内容,更多关于mybatis plus分页逻辑删除的资料请关注脚本之家其它相关文章!

相关文章

  • Springboot整合Freemarker的实现详细过程

    Springboot整合Freemarker的实现详细过程

    这篇文章主要介绍了Springboot整合Freemarker的实现详细过程,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-12-12
  • java编程常用技术(推荐)

    java编程常用技术(推荐)

    下面小编就为大家带来一篇java编程常用技术(推荐)。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2016-06-06
  • Java中生成随机数的4种方式与区别详解

    Java中生成随机数的4种方式与区别详解

    生成随机数是我们日常开发经常会遇到的一个功能,这篇文章主要给大家介绍了关于Java中生成随机数的4种方式与区别、应用场景的相关资料,4个方式分别是Random、ThreadLocalRandom、SecureRandom以及Math,需要的朋友可以参考下
    2021-06-06
  • spring-boot-maven-plugin:打包时排除provided依赖问题

    spring-boot-maven-plugin:打包时排除provided依赖问题

    这篇文章主要介绍了spring-boot-maven-plugin:打包时排除provided依赖问题,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2023-04-04
  • Java如何读取jar包中的resource资源文件

    Java如何读取jar包中的resource资源文件

    这篇文章主要介绍了Java如何读取jar包中的resource资源文件,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-08-08
  • Java中回调函数 (callback) 及其实际应用场景

    Java中回调函数 (callback) 及其实际应用场景

    在Java中回调函数(Callback)是一种常见的设计模式,用于实现异步操作或事件处理,这篇文章主要给大家介绍了关于Java中回调函数 (callback) 及其实际应用场景的相关资料,需要的朋友可以参考下
    2024-02-02
  • MyBatis框架搭建与代码解读分析

    MyBatis框架搭建与代码解读分析

    MyBatis是一个灵活的持久层框架,适合与数据库交互,支持自定义SQL和高级映射,这篇文章给大家介绍MyBatis框架搭建与代码解读,感兴趣的朋友跟随小编一起看看吧
    2024-08-08
  • SpringBoot使用JSP作为视图模板的方法

    SpringBoot使用JSP作为视图模板的方法

    这篇文章主要介绍了SpringBoot使用JSP作为视图模板的方法,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2018-08-08
  • Maven聚合开发实例详解

    Maven聚合开发实例详解

    这篇文章主要介绍了Maven聚合开发实例代码,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2023-03-03
  • 详解如何将JAVA程序制作成可以直接执行的exe文件

    详解如何将JAVA程序制作成可以直接执行的exe文件

    这篇文章主要介绍了详解如何将JAVA程序制作成可以直接执行的exe文件,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-09-09

最新评论