首页 > 其他分享 >配置逻辑删除

配置逻辑删除

时间:2024-06-04 16:00:24浏览次数:23  
标签:逻辑 删除 deleted 配置 list 查询 SQL

对于一些比较重要的数据,我们往往会采用逻辑删除的方案,即:

  • 在表中添加一个字段标记数据是否被删除
  • 当删除数据时把标记置为true
  • 查询时过滤掉标记为true的数据
一旦采用了逻辑删除,所有的查询和删除逻辑都要跟着变化,非常麻烦。   为了解决这个问题,MybatisPlus就添加了对逻辑删除的支持。 注意,只有MybatisPlus生成的SQL语句才支持自动的逻辑删除,自定义SQL需要自己手动处理逻辑删除。   例如,我们给address表添加一个逻辑删除字段:
alter table address add deleted bit default b'0' null comment '逻辑删除';
然后给Address实体添加deleted字段: 接下来,我们要在application.yml中配置逻辑删除字段:
mybatis-plus:
  global-config:
    db-config:
      logic-delete-field: deleted # 全局逻辑删除的实体字段名(since 3.3.0,配置后可以忽略不配置步骤2)
      logic-delete-value: 1 # 逻辑已删除值(默认为 1)
      logic-not-delete-value: 0 # 逻辑未删除值(默认为 0)
测试: 首先,我们执行一个删除操作:
@Test
void testDeleteByLogic() {
    // 删除方法与以前没有区别
    addressService.removeById(59L);
}
方法与普通删除一模一样,但是底层的SQL逻辑变了: 查询一下试试:
@Test
void testQuery() {
    List<Address> list = addressService.list();
    list.forEach(System.out::println);
}
会发现id为59的确实没有查询出来,而且SQL中也对逻辑删除字段做了判断: 综上, 开启了逻辑删除功能以后,我们就可以像普通删除一样做CRUD,基本不用考虑代码逻辑问题。还是非常方便的。 注意: 逻辑删除本身也有自己的问题,比如:
  • 会导致数据库表垃圾数据越来越多,从而影响查询效率
  • SQL中全都需要对逻辑删除字段做判断,影响查询效率
因此,我不太推荐采用逻辑删除功能,如果数据不能删除,可以采用把数据迁移到其它表的办法。

标签:逻辑,删除,deleted,配置,list,查询,SQL
From: https://www.cnblogs.com/linzepro/p/18231007

相关文章

  • 任务大师什么配置能玩?Quest Master官方推荐配置一览
    QuestMaster/任务大师不仅将为玩家提供丰富的地牢挑战,还带来了地牢创造的丰富玩法,让勇士们的冒险欲望不断膨胀,勇闯混沌洞穴,击穿他人的设计或建造独一无二的幽深地牢。有感兴趣的玩家想知道QuestMaster/任务大师什么配置能玩,下面本文将为大家带来QuestMaster/任务大师的官方......
  • 数据库的增删改查、数据表的增删改查、数据相关的插入、查看、更改、删除
    【一】操作MySQL数据库【1】数据库相关(1)创建数据库createdatabase[ifnotexists]数据库名字[charsetset字符编码集];#例如:createdatabaseifnotexistsday01;#设置库的默认编码createdatabasesdb1charset='gbk';(2)查看当前所有数据库showdatabases;--......
  • 配置Mysql允许远程连接
    目录1.开通其他主机使用root登录的权限2.在安装mysql的本机上添加防火墙允许规则,允许33063.补充1.开通其他主机使用root登录的权限在搜索里搜索msyql进入命令行,输入密码;usermysql showtables;显示所有数据库,我们可以看到有一个名为user的表。selectHost,Use......
  • kunernetes中路由器反射模式下与外部路由器配置BGP
    kunernetes中路由器反射模式下与外部路由器配置BGP,减少外部物理设备与K8S集群节点之间建立的BGP对等连接。如下为本次的拓扑图1.配置K8S集群为路由器反射模式1.1.关闭全互联模式root@master:~/bgp#catdisable-node-mesh.ymlapiVersion:projectcalico.org/v3kind:BGP......
  • .NET Core Configuration 配置项知识点一网打尽!
    控制台项目中,演示示例ConsoleAppConfig项目1.自定义 DictionaryConfig 内存字典模式dotnet add package Microsoft.Extensions.ConfigurationIConfigurationBuilder builder = new ConfigurationBuilder();builder.AddInMemoryCollection(new Dictionary<s......
  • git安装及配置密钥
    一、安装Git (默认你已经装好了)二、配置Git打开终端(在Windows上是GitBash,本教程以window为例,Mac或Linux上是Terminal)并配置你的用户信息。#设置全局用户名gitconfig--globaluser.name"你的名字"#设置全局电子邮件地址gitconfig--globaluser.email"you@examp......
  • .NET Core Configuration 配置项知识点一网打尽!
    控制台项目中,演示示例1.自定义 DictionaryConfig 内存字典模式dotnet add package Microsoft.Extensions.ConfigurationIConfigurationBuilder builder = new ConfigurationBuilder();builder.AddInMemoryCollection(new Dictionary<string, string>(){  ......
  • Spring boot - 仅当 JavaMailSender 豆存在时自动配置
    我相信这应该很简单,但我想不通。我有一个这样的配置类:@Configuration@AutoConfigureAfter(MailSenderAutoConfiguration.class)公共类MyMailConfiguration{@Bean@ConditionalOnBean(JavaMailSender.class)publicMyMailermyMailer(JavaMailSender......
  • redis - [03] 配置&命令
    题记部分 一、配置(Config)  二、命令(Command)(1)启动redis服务:redis-server.exeredis.windows.conf(2)连接redis-server:redis-cli-hhost-pport-apassword(3)查看key是否存在:existsmyKey(4)查看key的值:getmyKey(5)序列化给定key,返回序列化的值(不会改变key的值):dumpmy......
  • 《计算机网络微课堂》实验25 动态主机配置协议DHCP的作用
    下面我们来进行一个仿真实验,本仿真实验的目的在于验证动态主机配置协议DHCP的作用。我已经在软件中构建好了我们理论课中所使用的那个例子,并在各设备旁边标注出了所需的配置信息,我们的应用需求是不给局域网中的各主机手动配置IP地址,子网掩码、默认网关、DNS服务器等信息,而是......