温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
登录注册×
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》

mybatisplus的逻辑删除问题怎么解决

发布时间:2023-03-10 10:45:02 来源:亿速云 阅读:318 作者:iii 栏目:开发技术

本文小编为大家详细介绍“mybatisplus的逻辑删除问题怎么解决”,内容详细,步骤清晰,细节处理妥当,希望这篇“mybatisplus的逻辑删除问题怎么解决”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。

mybatisplus的逻辑删除

mp提供的逻辑删除实现起来非常简单

只需要在application.yml中进行逻辑删除的相关配置即可

mybatis-plus:  
  global-config:  
    db-config:  
      logic-delete-field: deleted # 全局逻辑删除的实体字段名  
      logic-delete-value: 1 # 逻辑已删除值(默认为1)  
      logic-not-delete-value: 0 # 逻辑未删除值(默认为0)  
      # 若逻辑已删除和未删除的值和默认值一样,则可以不配置这2项

测试代码

int i = mapper.deleteById(6);  
		System.out.println("rowAffected = " + i);

mybatisplus的逻辑删除问题怎么解决

可以看到,发出的SQL不再是DELETE,而是UPDATE

此时我们再执行一次SELECT

@Test  
public void testSelect() {  
	List<User2> users = mapper.selectList(null);  
}

mybatisplus的逻辑删除问题怎么解决

可以看到,发出的SQL语句,会自动在WHERE后面拼接逻辑未删除的条件。

查询出来的结果中,没有了id为6的王软蛋。

若想要SELECT的列,不包括逻辑删除的那一列,则可以在实体类中通过@TableField进行配置

@TableField(select = false)  
private Integer deleted;

可以看到下图的执行结果中,SELECT中已经不包含deleted这一列了

mybatisplus的逻辑删除问题怎么解决

前面在application.yml中做的配置,是全局的。通常来说,对于多个表,我们也会统一逻辑删除字段的名称,统一逻辑已删除和未删除的值,所以全局配置即可。

当然,若要对某些表进行单独配置,在实体类的对应字段上使用@TableLogic即可。

@TableLogic(value = "0", delval = "1")  
private Integer deleted;

【小结】

开启mp的逻辑删除后,会对SQL产生如下的影响

  • INSERT语句:没有影响

  • SELECT语句:追加WHERE条件,过滤掉已删除的数据

  • UPDATE语句:追加WHERE条件,防止更新到已删除的数据

  • DELETE语句:转变为UPDATE语句

注意,上述的影响,只针对mp自动注入的SQL生效。如果是自己手动添加的自定义SQL,则不会生效。

比如:

public interface User2Mapper extends BaseMapper<User2> {  
	@Select("select * from user2")  
	List<User2> selectRaw();  
}

调用这个selectRaw,则mp的逻辑删除不会生效。

另,逻辑删除可在application.yml中进行全局配置,也可在实体类中用@TableLogic进行局部配置。

使用mybatisplus逻辑删除,修改含有逻辑删除的字段爆错

mybatisplus在配置文件中配置如下

mybatisplus的逻辑删除问题怎么解决

以上是全局逻辑删除配置。

当使用mybatisplus生成的修改方法,修改含有showStatus对应的字段时,会报错。

错误sql语句如下

mybatisplus的逻辑删除问题怎么解决

而我要修改的如下:

mybatisplus的逻辑删除问题怎么解决

正确的修改的sql语句应该如下:

mybatisplus的逻辑删除问题怎么解决

所以我们可以在xml文件中单独写sql语句

或者不在配置文件中设置逻辑删除字段名 使用@TableLogic注解

如下:

mybatisplus的逻辑删除问题怎么解决

showStatus是表示此信息是否显示。

如:

mybatisplus的逻辑删除问题怎么解决

表示 show_status等于0时 brand_id (即id)=1591652104429125634 的信息不显示。

这样我们就是局部使用逻辑删除。

读到这里,这篇“mybatisplus的逻辑删除问题怎么解决”文章已经介绍完毕,想要掌握这篇文章的知识点还需要大家自己动手实践使用过才能领会,如果想了解更多相关内容的文章,欢迎关注亿速云行业资讯频道。

向AI问一下细节

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

AI