Mybatis-Plus的逻辑删除

举报
酸菜鱼. 发表于 2022/07/24 20:37:49 2022/07/24
【摘要】 Mybatis-Plus的逻辑删除

🍵分页查询

Mybatis-Plus自带分页查询的插件,不用编写一些类,但需要我们简单配置。

首先还是在我们的configuration配置类中配置:

//分页的插件
@Bean
public PaginationInterceptor paginationInterceptor() {
    return new PaginationInterceptor();

配置完上面内容即可使用:

    @Test
    public 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的其他知识点,喜欢的大佬可以多多支持哦😉😉。
如果有什么疑问的地方请指出,诸佬们一起讨论🍻🍻
在这里插入图片描述

最后再次给大家安利一波牛客,牛客真的很不错的软件,点击刷题神器
注册牛客,快来和博主一起刷题吧嘿嘿嘿👏
同时祝伙伴儿找到理想的工作及猛猛地提升算法能力哦😏

再次感谢各位小伙伴儿们的支持🤞

在这里插入图片描述

【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。