还再手写逻辑删除?一个注解 @TableLogic 轻松搞定!

发布时间:2026/5/22 9:34:30

还再手写逻辑删除?一个注解 @TableLogic 轻松搞定! 来自https://blog.csdn.net/qq_43842093推荐一个程序员编程资料站http://cxyroad.com副业赚钱专栏https://xbt100.top2024年IDEA最新激活方法后台回复激活码CSDN免登录复制代码插件下载CSDN复制插件以下是正文。介绍TableLogic注解用于实现数据库的逻辑删除功能它会影响insert、select、update和delete操作。当在字段上添加此注解并执行BaseMapper的delete方法时实际执行的是更新操作将删除字段设为特定值。注解有两个参数value默认值和delval删除后的值。在查询和更新时会自动添加条件过滤已删除的数据。TableLogic注解TableLogic表示逻辑删除注解效果在字段上加上这个注解再执行BaseMapper的删除方法时删除方法就会变成修改例 实体类 TableLogic private Integer del; service层: 调用BaseMapper的deleteById(id); 执行是效果 加TableLogic的情况下 走 Update 表名 set 加注解的列值 where del值 不加TableLogic的情况下 走 delete from 表名 where del值 TableLogic注解参数 value 默认的原值 delval 删除后的值 TableLogic(value原值,delval改值)2. 注解说明TableLogic用于实现数据库数据逻辑删除注意该注解只对自动注入的 sql 起效3. TableLogic 对于 CIUD 的限制3.1 插入insert不作限制3.2 查找selectTableLogic注解将会在 select 语句的 where 条件添加条件过滤掉已删除数据且使用wrapper.entity生成的 where 条件会忽略该字段SELECT user_id,name,sex,age,deleted FROM user WHERE user_id1 AND deleted03.3 更新updateTableLogic注解将会在 update 语句的 where 条件后追加条件防止更新到已删除数据且使用wrapper.entity生成的 where条件会忽略该字段update user set deleted1 where id 1 and deleted03.4 删除deleteTableLogic注解会将 delete 语句转变为 update 语句update user set deleted1 where id 1 and deleted04. TableLogic 字段类型支持说明支持所有数据类型推荐使用Integer、Boolean、LocalDateTime如果数据库字段使用datetime逻辑未删除值和已删除值支持配置为字符串 null另一个值支持配置为函数来获取值如now()附录逻辑删除是为了方便数据恢复和保护数据本身价值等等的一种方案但实际就是删除。如果你需要频繁查出来看就不应使用逻辑删除而是以一个状态去表示。5. 属性说明5.1 value用来指定逻辑未删除值默认为空字符串5.2 delval用来指定逻辑删除值默认为空字符串。6. 在配置文件中实现当然你也可以不在TableLogic注解中指定value和delval属性的值。使用全局逻辑删除配置信息配置如下# application.yml mybatis-plus: global-config: db-config: # 全局逻辑删除的实体字段名 (since 3.3.0, 配置后可以忽略 TableLogic 中的配置) logic-delete-field: flag # 逻辑已删除值(默认为 1) logic-delete-value: 1 # 逻辑未删除值(默认为 0) logic-not-delete-value: 07. 代码实践7.1 代码实践过程我们在user数据表中添加一个deleted字段。如果该字段值为1表示记录被删除。如果该字段值为0表示记录未被删除向 user 数据表添加 deleted 字段sql 如下-- 添加一个 deleted 字段实现逻辑删除 ALTER TABLE user ADD COLUMN deleted varchar(1) NULL DEFAULT 0 COMMENT 是否删除1-删除0-未删除;创建 user 表的实体类AnnotationUser7Bean使用TableLogic注解将deleted成员变量指定为逻辑删除字段import com.baomidou.mybatisplus.annotation.*; TableName(value user) public class AnnotationUser7Bean { TableId(value user_id, type IdType.AUTO) private int userId; TableField(name) private String name; TableField(sex) private String sex; TableField(age) private Integer age; TableLogic(value 0, delval 1) private String deleted; // 忽略 getter 和 setter 方法 Override public String toString() { returnUserBean{ userId userId , name name \ , sex sex \ , age age , deleted deleted }; } }上面代码中使用TableLogic注解将deleted成员变量指定为逻辑删除字段TableLogic(value 0, delval 1) private String deleted;客户端代码先查询用户ID为1的用户是否存在如果存在则删除该用户信息然后查询用户ID小于10的用户信息package com.hxstrive.mybatis_plus.simple_mapper.annotation; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.hxstrive.mybatis_plus.mapper.AnnotationUser7Mapper; import com.hxstrive.mybatis_plus.model.AnnotationUser7Bean; import org.junit.jupiter.api.Test; import org.junit.runner.RunWith; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.test.context.SpringBootTest; import org.springframework.test.context.junit4.SpringRunner; RunWith(SpringRunner.class) SpringBootTest class AnnotationDemo7 { Autowired private AnnotationUser7Mapper userMapper; Test void contextLoads() throws Exception { // 删除用户ID为1的用户信息 AnnotationUser7Bean oldUserBean userMapper.selectById(1); if(null ! oldUserBean) { userMapper.deleteById(oldUserBean.getUserId()); } // 查询用户信息 QueryWrapperAnnotationUser7Bean wrapper new QueryWrapper(); wrapper.lt(user_id, 10); for(AnnotationUser7Bean item : userMapper.selectList(wrapper)) { System.out.println(item); } } }7.2 数据库代码执行说明根据用户ID查询用户信息Preparing: SELECT user_id,name,sex,age,deleted FROM user WHERE user_id? AND deleted0 Parameters: 1(Integer)根据用户ID删除用户信息sql 是一个更新语句这是因为我们使用了逻辑删除而不是物理删除Preparing: UPDATE user SET deleted1 WHERE user_id? AND deleted0 Parameters: 1(Integer)查询用户ID小于10的用户信息Preparing: SELECT user_id,name,sex,age,deleted FROM user WHERE deleted0 AND (user_id ?) Parameters: 10(Integer)END推荐阅读副业赚钱推荐让你的时间开始变现免费体验AI图片生成就在 Image Generator Hub程序员在线工具站cxytools.com 推荐一个自己写的工具站https://cxytools.com专为程序员设计包括时间日期、 JSON处理、SQL格式化、随机字符串生成、UUID生成、文本Hash...等功能提升开发效 率。 ⬇戳阅读原文直达 朕已阅

相关新闻