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 逻辑删除内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!
相关文章
Mybatis-Plus开发提速器mybatis-plus-generator-ui详解
这篇文章主要介绍了Mybatis-Plus开发提速器mybatis-plus-generator-ui,本文简要介绍一款基于Mybatis-Plus的代码自助生成器,文章通过实例集成的方式来详细讲解mybatis-plus-generator-ui,从相关概念到实际集成案例,以及具体的扩展开发介绍,需要的朋友可以参考下2022-11-11
详解SpringBoot开发案例之整合定时任务(Scheduled)
本篇文章主要介绍了详解SpringBoot开发案例之整合定时任务(Scheduled),具有一定的参考价值,有兴趣的可以了解一下2017-07-07
Java中的BaseTypeHandler自定义类型转换器的使用
这篇文章主要介绍了Java中的BaseTypeHandler自定义类型转换器的使用,文章围绕主题展开详细的内容介绍,具有一定的参考价值,需要的小伙伴可以参考一下2022-05-05
SpringBoot核心@SpringBootApplication使用介绍
这篇文章主要介绍了SpringBoot核心@SpringBootApplication的使用,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教2022-03-03


最新评论