java

关注公众号 jb51net

关闭
首页 > 软件编程 > java > mybatis-plus 逻辑删除

mybatis-plus实现逻辑删除的示例代码

作者:Bruce1801

本文主要介绍了mybatis-plus实现逻辑删除的示例代码,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧

什么是逻辑删除?

逻辑删除的本质是修改操作,并不是真正的删除,而是在表中将对应的是否删除标识(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 逻辑删除内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

您可能感兴趣的文章:
阅读全文