当前位置: 首页 > article >正文

MyBatisPlus笔记之逻辑删除、枚举处理器、JSON处理器

逻辑删除

MybatisPlus提供了逻辑删除功能,无需改变方法调用的方式,而是在底层帮我们自动修改CRUD的语句。我们要做的就是在application.yaml文件中配置逻辑删除的字段名称和值即可:

比如在淘宝订单中,我们偷偷买了不为人知的好东西,为了不被女朋友发现,我需要删除次订单。但在数据库中不能真的删除此订单,因为商家需要依靠这份数据进行数据统计。因此,我们可以在数据库用某一标识符标记这份数据是否逻辑删除,如果逻辑删除则不返回给客户。

mybatis-plus:
  global-config:
    db-config:
      logic-delete-field: deleted #配置逻辑删除字段
#      logic-delete-value:1 #如果逻辑删除则设置为1,不手动设置则默认为1
#      logic-not-delete-value:0 #如果逻辑未删除则设置为0,不手动设置则默认为0

逻辑删除本身也有自己的问题,比如:

  • 会导致数据库表垃圾数据越来越多,影响查询效率

  • SQL中全都需要对逻辑删除字段做判断,影响查询效率

因此,不太推荐采用逻辑删除功能,如果数据不能删除,可以采用把数据迁移到其它表的办法。

枚举处理器

实现PO类中的枚举类型变量与数据库字段的转换

在application.yml中配置全局枚举处理器:

给枚举中的与数据库对应value值添加@EnumValue注解

import com.baomidou.mybatisplus.annotation.EnumValue;
import com.fasterxml.jackson.annotation.JsonValue;
import lombok.Getter;

@Getter
public enum UserStatus {
    NORMAL(1, "正常"),
    FROZEN(2, "冻结"),
    ;
    @EnumValue // 枚举值映射数据库存储值
    private final int value;
    @JsonValue // 枚举值序列化时映射的值,人话就是返回给前端的值
    private final String desc;

    UserStatus(int value, String desc) {
        this.value = value;
        this.desc = desc;
    }
}
  • @EnumValue 枚举值映射数据库存储值
  • @JsonValue 枚举值序列化时映射的值,人话,就是返回给前端的值

在配置文件中配置统一的枚举处理器,实现类型转换

mybatis-plus:
  configuration:
    default-enum-type-handler: com.baomidou.mybatisplus.core.handlers.MybatisEnumTypeHandler

JSON处理器

如果数据库有一个json格式的数据,那么我们可以用一个对象封装这个JSON格式的每一个数据。然后在需要与数据库对应的实体类表上添加上@TableName(autoResultMap = true)//开启字符串转json格式注解,然后再需要与数据库映射的字段添加上@TableField(typeHandler = JacksonTypeHandler.class)注解。

封装:

import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;

@Data
@NoArgsConstructor
@AllArgsConstructor(staticName = "of") //运行静态调用,类名.xxx
public class UserInfo {
    private Integer age;
    private String intro;
    private String gender;
}

JSON格式转换:


import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableName;
import com.baomidou.mybatisplus.extension.handlers.JacksonTypeHandler;
import com.itheima.mp.enmus.UserStatus;
import lombok.Data;
import org.apache.ibatis.type.JapaneseDateTypeHandler;

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

@Data
@TableName(autoResultMap = true)//开启字符串转json格式
public class User implements Serializable {

    /**
     * 用户id
     */
    private Long id;

    /**
     * 用户名
     */
    private String username;

    /**
     * 密码
     */
    private String password;

    /**
     * 注册手机号
     */
    private String phone;

    /**
     * 详细信息
     */
    @TableField(typeHandler = JacksonTypeHandler.class)
    private UserInfo info;

    /**
     * 使用状态(1正常 2冻结)
     */
    private UserStatus status;

    /**
     * 账户余额
     */
    private Integer balance;

    /**
     * 创建时间
     */
    private LocalDateTime createTime;

    /**
     * 更新时间
     */
    private LocalDateTime updateTime;
}


http://www.kler.cn/news/353800.html

相关文章:

  • WindowsAPI|每天了解几个winAPI接口之网络配置相关文档Iphlpapi.h详细分析五
  • 微服务经典应用架构图
  • QUIC 协议的优势
  • Node.js基础与应用
  • 力扣面试150 交错字符串 二维DP
  • 数学建模算法与应用 第7章 数理统计与方法
  • Python | Leetcode Python题解之第482题秘钥格式化
  • 深入理解Dubbo原理鱼实现,提升职场竞争力
  • 从0开始学Python-day8
  • Unity3D 如何实现从任意位置与方向出发后按规定方向到达目标点详解
  • C#从零开始学习(如何构建应用)
  • Java:类和对象
  • Mysql—高可用集群MHA
  • C++设计模式——装饰器模式
  • 2024年10款超好用的图纸加密软件推荐|企业图纸加密必备!
  • IntelliJ IDEA如何安装插件
  • 胤娲科技:AI短视频——创意无界,即梦启航
  • C++笔记之静态多态和动态多态
  • Java日常开发小结-01
  • 【C语言】占位符集合