mybatis-plus实现逻辑删除的示例代码
作者:Bruce1801
什么是逻辑删除?
逻辑删除的本质是修改操作,并不是真正的删除,而是在表中将对应的是否删除标识(delete_flag)做修改操作。比如0是未删除,1是删除。在逻辑上数据是被删除的,但数据本身依然存在库中。
逻辑删除sql语句为:
update user set deleted=1 where id = 1 and deleted=0
这种设计,后端每次向数据库查询数据时,只查deleted=0(未删除)的数据。拿上面sql举例,那么客户端进行查询id为1的信息,服务器就不会提供信息。
查询sql为:
select id,name,deleted from user where deleted=0
为什么用到逻辑删除?
比如:在一家销售公司中,有两个员工在一月份离职了,后台管理人员在办离职时,如果直接将数据库中与这两个员工相关的信息删除了,那么当经理想要看一月份的销售记录的时候,只能看到部分销售记录,销售金额对不上。这种情况肯定是不允许发生的
如下图:
本来一月总共销售了17,000,00元,结果删除后只剩下了5,000,00。
只需要在员工工号后面加delete_flag字段,用于标记是否被删除即可。
在springboot使用Mybatis-Plus提供的逻辑删除
字段类型支持说明:
支持所有数据类型(推荐使用 Integer,Boolean,LocalDateTime)
如果数据库字段使用datetime,逻辑未删除值和已删除值支持配置为字符串null,另一个值支持配置为函数来获取值如now()
1、在application.yml配置
mybatis-plus: global-config: db-config: logic-delete-field: flag # 全局逻辑删除的实体字段名(since 3.3.0,配置后可以忽略不配置步骤2) logic-delete-value: 1 # 逻辑已删除值(默认为 1) logic-not-delete-value: 0 # 逻辑未删除值(默认为 0)
2、 实体类字段上加上@TableLogic注解
@Data public class UserPO implements Serializable { @TableId(type = IdType.ASSIGN_ID) private Long id; private String userName; private String password; private String nickName; @TableLogic private int delFlag; }
演示
数据库t_user表中数据:
UserPOMapper:
@Mapper public interface UserPOMapper extends BaseMapper<UserPO> { }
IUserService:
public interface IUserService extends IService<UserPO> { }
IUserServiceImpl:
@Service public class IUserServiceImpl extends ServiceImpl<UserPOMapper, UserPO> implements IUserService { }
Controller:
@RequestMapping("/open/del") public ResultUtil del(UserParam userParam){ UserPO one = iUserService.getOne(new LambdaQueryWrapper<UserPO>() .eq(UserPO::getUserName, userParam.getUserName())); boolean b = iUserService.removeById(one); System.out.println(b); return ResultUtil.success(b); }
ResultUtil:
@Data public class ResultUtil { private String code; private String message; private Object data; public static ResultUtil success(Object data){ ResultUtil resultUtil = new ResultUtil(); resultUtil.setCode("200"); resultUtil.setMessage("请求成功"); resultUtil.setData(data); return resultUtil; } }
浏览器请求:
数据库t_user表中数据:
可以看到,加了@TableLogic注解的字段对应的数据库字段,由0(未删除)改为1(已删除)
到此这篇关于mybatis-plus实现逻辑删除的示例代码的文章就介绍到这了,更多相关mybatis-plus 逻辑删除内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!