mybatis-plus实现逻辑删除

目录

一、什么是逻辑删除?

二、为什么使用逻辑删除?

三、在springboot使用Mybatis-Plus提供的逻辑删除

3.1、在application.yml配置

3.2、实体类字段上加上@TableLogic注解

3.3、演示

 3.4、UserMapper

 3.5、IUserService

3.6、UserServiceImpl

3.7、controller

3.8、ResultUtil

3.9、浏览器请求

 3.10、数据库的数据


一、什么是逻辑删除?

        逻辑删除的本质是修改操作,并不是真正的删除,而是在表中将对应的是否删除标识(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、演示

mybatis-plus实现逻辑删除_第1张图片

 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 {
}

 3.5、IUserService



/**
 * 用户服务
 *
 * @author yunyan
 */
public interface IUserService extends IService {

}

3.6、UserServiceImpl



/**
 * 用户服务impl
 *
 * @author yunyan
 */
@Service
public class UserServiceImpl extends ServiceImpl implements IUserService {

}

3.7、controller

@RequestMapping("/open/del")
    public ResultUtil del(UserParam userParam){
        UserPO one = userService.getOne(new LambdaQueryWrapper()
                .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、浏览器请求

mybatis-plus实现逻辑删除_第2张图片

 3.10、数据库的数据

可以看到,加了@TableLogic注解的字段对应的数据库字段,由0(未删除)改为1(已删除)

mybatis-plus实现逻辑删除_第3张图片

你可能感兴趣的:(mybatis,oracle,数据库)