文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

mybatisplus逻辑删除如何实现

2023-07-05 19:32

关注

这篇文章主要介绍了mybatisplus逻辑删除如何实现的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇mybatisplus逻辑删除如何实现文章都会有所收获,下面我们一起来看看吧。

mybatisplus中逻辑删除通俗说为了在数据库中保留数据,但是又不想进行其他一些sql语句时有他(刚刚通过逻辑删除了的)的存在。就是在数据库中添加一字段,通过数值内容来说明那些是指删除了的即可。

mp逻辑删除的基本实现

步骤一(添加数据库对应字段)

首先数据库中添加对应字段(此处通过deleted字段代表逻辑删除字段,即0为未被删除,1为已删除)

mybatisplus逻辑删除如何实现

步骤二(逻辑删除的实现) 

1.方法一(单表注解设置)

在数据表对象层中对应对类的对应字段中通过注解实现(@TableLogic(),这里value和delval就是mp给我们定义的是否删除的标记,数值由开发者设定)

@Data@AllArgsConstructor@NoArgsConstructorpublic class Book {    private Long id;    private String type;    private String name;    private String description;        //逻辑删除(就是在delete字段做标记,不是真正意义上的删除)    @TableLogic(value = "0",delval = "1")    private Integer deleted;}

2.方法二(全局配置文件设置)

通过配置实现。这样实现的就比较全局,没有指定那个指定数据表对象层中对应对类的对应字段实现逻辑删除这个功能,只要拥有全局设置一样的字段即可。

(这使用springboot框架的application.yml配置为例,其中logic-delete-field是指要指定字段名,logic-delete-value:是删除后设置成的值,logic-not-delete-value是未删除的值是什么)

#  mp日志mybatis-plus:    db-config:      logic-delete-field: deleted      logic-delete-value: 1      logic-not-delete-value: 0

步骤三(测试)

在测试类中测试并查看数据库对应表的对应测试数据有什么变化。

在此测试中发现,数据库表对应的数据并没有真正意义上的删除,只是在对应字段做好了设定好的标记。

而且在其他mp操作此表时并没有这条数据的参与,即实现开发者想删除某条数据,但又想数据库能保留这个数据记录。

1.测试类进行逻辑删除测试代码

这是通过id实现逻辑删除

    @Autowired    private BookDao bookDao;    @Test    public void deleteById(){        int i = bookDao.deleteById(12L);        System.out.println("影响行数为:"+i+"条");    }

2.删除后数据表对应数据变化

id为12数据对应的deleted已经变成了1

mybatisplus逻辑删除如何实现

3.测试其他mp操作是否有对标记删除了的数据有“参与”

此处是对上面操作完成后进行的mp操作(查询表中所有数据所有)

    @Autowired    private BookDao bookDao;    @Test    void findAll() {        List<Book> books = bookDao.selectList(null);        for (Book book :books) {            System.out.println(book);        }    }

结果如下(显然,id为12的数据并没有查询出来,但是数据库还是存在此条数据。)

mybatisplus逻辑删除如何实现

mp逻辑删除不生效

我这总结了几个可能遇到的一些仅仅关于mp逻辑删除本身可能出现的问题解决参考(排除一些其他因素,单纯讲讲mp逻辑删除本身的坑点)

坑点一

报错点: Cause: java.sql.SQLSyntaxErrorException: Unknown column &lsquo;deleted&rsquo; in &lsquo;where clause&rsquo;
; bad SQL grammar []; nested exception is java.sql.SQLSyntaxErrorException: Unknown column &lsquo;deleted&rsquo; in &lsquo;where clause&rsquo;:

原因解释就跳过了,解决方法其实就是只要把设定的删除字段设置为“deleted”即可(也多注意逻辑删除需要添加的数据库字段得用“deleted”命名,不然可能就会报上面这个报错点了)。

坑点二

报错点:就是在多个表使用mp操作的时候,注意一些全局设置和局部设置区别。

例如这篇所说的mp逻辑删除内容,实现有两个方法,分别是数据表对象层中对应对类的对应字段中通过注解实现@TableLogic()和全局变量配置中设置。

注意如果设置成了局部,那么就只是针对设置了的实现,如果设置了全局,则所有设置了逻辑删除字段(deleted)在进行mp删除操作时,都是进行逻辑删除操作。

解决方法就是根据实际开发需求,实际操作设置即可。

关于“mybatisplus逻辑删除如何实现”这篇文章的内容就介绍到这里,感谢各位的阅读!相信大家对“mybatisplus逻辑删除如何实现”知识都有一定的了解,大家如果还想学习更多知识,欢迎关注编程网行业资讯频道。

阅读原文内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     813人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     354人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     318人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     435人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     224人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-后端开发
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯