mybatis-plus实现逻辑删除的示例代码
作者:IT云烟.
在大多数公司里,都会采用逻辑删除的方式,本文主要介绍了mybatis-plus实现逻辑删除的示例代码,具有一定的参考价值,感兴趣的可以了解一下
一、什么是逻辑删除?
逻辑删除的本质是修改操作,并不是真正的删除,而是在表中将对应的是否删除标识(del_flag)做修改操作。比如0是未删除,1是删除。在逻辑上数据是被删除的,但数据本身依然存在库中。
逻辑删除sql语句为:
update user set del_flag=1 where id = 1 and del_flag=0
这种设计,后端每次向数据库查询数据时,只查del_flag=0(未删除)的数据。拿上面sql举例,那么客户端进行查询id为1的信息,服务器就不会提供信息。
查询sql为:
select id,name,del_flag from user where del_flag=0
二、为什么使用逻辑删除?
- 方便数据恢复,保护数据本身的价值。
- 保证数据连续性,对主键的影响可能会导致底层B+树重建,而 delete 和 update id 都会影响主键。
事实上,在大多数公司里,都会采用逻辑删除的方式,因为数据的价值更大,被删除的数据也非常有记录价值,这样的操作也并不会提高太多的操作难度。
三、在springboot使用Mybatis-Plus提供的逻辑删除
字段类型支持说明:
支持所有数据类型(推荐使用 Integer,Boolean,LocalDateTime)
如果数据库字段使用datetime,逻辑未删除值和已删除值支持配置为字符串null,另一个值支持配置为函数来获取值如now()
3.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)
3.2、实体类字段上加上@TableLogic注解
import com.baomidou.mybatisplus.annotation.*; import lombok.Data; import java.io.Serializable; /** * 用户订单 * * @author yunyan */ @TableName("t_user") @Data public class UserPO implements Serializable { /** * id */ @TableId(type = IdType.ASSIGN_ID) private Long id; /** * 用户名 */ private String userName; /** * 密码 */ private String password; /** * 昵称 */ private String nickName; /** * 删除标识 */ @TableLogic private Integer delFlag;
3.3、演示
3.4、UserMapper
import com.baomidou.mybatisplus.core.mapper.BaseMapper; import com.example.testinterface.entity.po.UserPO; import org.apache.ibatis.annotations.Mapper; /** * 用户映射器 * * @author yunyan */ @Mapper public interface UserMapper extends BaseMapper<UserPO> { }
3.5、IUserService
/** * 用户服务 * * @author yunyan */ public interface IUserService extends IService<UserPO> { }
3.6、UserServiceImpl
/** * 用户服务impl * * @author yunyan */ @Service public class UserServiceImpl extends ServiceImpl<UserMapper, UserPO> implements IUserService { }
3.7、controller
@RequestMapping("/open/del") public ResultUtil del(UserParam userParam){ UserPO one = userService.getOne(new LambdaQueryWrapper<UserPO>() .eq(UserPO::getUserName, userParam.getUserName())); boolean b = userService.removeById(one); System.out.println(b); return ResultUtil.success(b); }
3.8、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; } }
3.9、浏览器请求
3.10、数据库的数据
可以看到,加了@TableLogic注解的字段对应的数据库字段,由0(未删除)改为1(已删除)
到此这篇关于mybatis-plus实现逻辑删除的示例代码的文章就介绍到这了,更多相关mybatis-plus 逻辑删除内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!