MybatisPlus改造逻辑删除有多方便

本文详细介绍了如何将项目从无逻辑删除改为MybatisPlus的逻辑删除模式,包括修改POM.xml版本、配置application.yml、添加实体类标记和更新mapper.xml。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

MybatisPlus的逻辑删除可以有效保留历史数据。之前没有用逻辑删除的项目,想改造成逻辑删除总共需要几步?

答案:4步搞定

一、修改pom.xml的MybatisPlus版本(注意版本兼容性)

    <properties>
        ...
        <!--<mybatis-plus.version>3.1.1</mybatis-plus.version>-->
        <mybatis-plus.version>3.3.0</mybatis-plus.version>
    </properties>

二、application.yml中添加逻辑删除配置

mybatis-plus:
  global-config:
    db-config:
      logic-delete-field: flag # 全局逻辑删除的实体字段名(since 3.3.0,配置后可以忽略不配置步骤2) 建议字段使用deleted
      logic-delete-value: 1 # 逻辑已删除值(默认为 1) 默认可以不配
      logic-not-delete-value: 0 # 逻辑未删除值(默认为 0) 默认可以不配

三、在java实体类中增加标志位属性(private boolean deleted;)

package cc.mrbird.febs.cos.entity;

import java.time.LocalDateTime;
import java.io.Serializable;

import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableLogic;
import lombok.Data;
import lombok.EqualsAndHashCode;
import lombok.experimental.Accessors;

/**
 * 耗材类型
 *
 * @author FanK
 */
@Data
@EqualsAndHashCode(callSuper = false)
@Accessors(chain = true)
public class ConsumableType implements Serializable {

    private static final long serialVersionUID = 1L;

    @TableId(value = "ID", type = IdType.AUTO)
    private Integer id;
    /**
     * 耗材类别名称
     */
    private String name;

    /**
     * 备注
     */
    private String content;

    /**
     * 创建时间
     */
    private String createDate;

    /**
     * 逻辑删除标志位
     */
    //@TableLogic 3.3.0 版本后 可以不配@TableLogic标签
    private boolean deleted;

}

四、在数据库表中增加标志位字段deleted(类型bit)

然后重启springboot,逻辑删除即生效

修改前

修改后:

需要注意的是,如果这个表涉及到通过mapper.xml编写的复杂查询,需要手动修改相关mapper.xml中的sql语句,否则其他业务逻辑会出现异常。

比如:

页面第一条数据在数据库中已经逻辑删除了,但是仍显示在界面上。

 需要在StockPutMapper.xml中添加查询条件:

and sp.deleted = 0

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="cc.mrbird.febs.cos.dao.StockPutMapper">

    <!-- 分页获取入库记录 -->
    <select id="stockPutByPage" resultType="java.util.LinkedHashMap">
        SELECT
        sp.id,
        sp.num,
        sp.price,
        sp.custodian,
        sp.put_user AS putUser,
        sp.content,
        sp.create_date AS createDate
        FROM
        stock_put sp
        WHERE 1 = 1
        <!-- wh 添加逻辑删除后,需要增加查询条件 -->
            and sp.deleted = 0
        <if test="stockPut.num != null and stockPut.num != ''">
            AND sp.num LIKE CONCAT('%',#{stockPut.num},'%')
        </if>
        <if test="stockPut.putUser != null and stockPut.putUser != ''">
            AND sp.put_user LIKE CONCAT('%',#{stockPut.putUser},'%')
        </if>
        <if test="stockPut.custodian != null and stockPut.custodian != ''">
            AND sp.custodian LIKE CONCAT('%',#{stockPut.custodian},'%')
        </if>
    </select>
</mapper>

如果不想将全部表改造逻辑删除,只改造部分表为逻辑删除,剩余改造的表增删改查操作受影响吗?

答案:不受影响,只要java实体类没有设置删除标志属性,mybatisplus自动生成的表操作仍按原始操作进行。比如将本例中的ConsumableType实体类,添加private boolean deleted;属性后,删除sql变为update ... set ... where ...,这时将private boolean deleted;属性注释掉,删除操作恢复为原来的 delete ... from ...。

15.扩展功能-逻辑删除_哔哩哔哩_bilibili

逻辑删除 | MyBatis-Plus

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值