MyBatis-Plus逻辑删除和字段自动填充的实现

下面我将详细讲解 MyBatis-Plus 逻辑删除和字段自动填充的实现攻略。

什么是 MyBatis-Plus

首先,MyBatis-Plus 是 MyBatis 的增强工具包,提供了许多实用的功能,如分页、逻辑删除和字段自动填充等。

逻辑删除的实现

配置逻辑删除插件

  1. 导入 MyBatis-Plus 的依赖
<dependency>
    <groupId>com.baomidou</groupId>
    <artifactId>mybatis-plus-boot-starter</artifactId>
    <version>3.4.2</version>
</dependency>
  1. 配置逻辑删除插件

在 Spring Boot 启动类中新增 MybatisPlusConfig 类,并在这个类中配置逻辑删除插件:

@Configuration
public class MybatisPlusConfig {

    @Bean
    public ISqlInjector sqlInjector() {
        return new LogicSqlInjector();
    }

    @Bean
    public GlobalConfig globalConfig() {
        GlobalConfig globalConfig = new GlobalConfig();
        globalConfig.setSqlInjector(sqlInjector());
        globalConfig.setMetaObjectHandler(new MyMetaObjectHandler());
        return globalConfig;
    }
}

其中,LogicSqlInjector 是 MyBatis-Plus 提供的逻辑删除插件,MyMetaObjectHandler 是用于处理逻辑删除字段的值的。

创建实体类

在实体类中,需要声明一个字段作为逻辑删除字段,并在这个字段上加上 @TableLogic 注解来指定列名和删除标记值(删除标记值在实际项目中可以根据需要自定义)。

示例实体类:

@Data
@TableName(value = "user")
public class User {

    @TableId(type = IdType.AUTO)
    private Long id;

    private String name;

    @TableLogic(value = "0", delval = "1")
    private Integer deleted;
}

使用逻辑删除

在使用 MyBatis-Plus 提供的 CRUD 操作时,可以直接使用 logicDelete 方法来执行逻辑删除操作。

示例代码:

// 删除 deleted 值为 0 的记录
int count = userMapper.delete(new QueryWrapper<User>().eq("deleted", 0));

// 查询 deleted 值为 0 的记录
List<User> userList = userMapper.selectList(new QueryWrapper<User>().eq("deleted", 0));

字段自动填充的实现

字段自动填充是指在进行插入或更新操作时,根据一定的规则自动填充某些字段的值。

配置字段自动填充

  1. 实现 MetaObjectHandler 接口

首先需要实现 MetaObjectHandler 接口,并把它注册到 MyBatis-Plus 的全局配置中。

示例:

public class MyMetaObjectHandler implements MetaObjectHandler {

    @Override
    public void insertFill(MetaObject metaObject) {
        this.setFieldValByName("createTime", new Date(), metaObject);
    }

    @Override
    public void updateFill(MetaObject metaObject) {
        this.setFieldValByName("updateTime", new Date(), metaObject);
    }
}

以上代码中,insertFill 方法用于在插入操作时自动填充创建时间字段的值,updateFill 方法用于在更新操作时自动填充更新时间字段的值。

  1. 配置全局配置

把上一步实现的自定义 MetaObjectHandler 注册到 MyBatis-Plus 的全局配置中。

示例:

@Configuration
public class MybatisPlusConfig {

    @Bean
    public GlobalConfig globalConfig() {
        GlobalConfig globalConfig = new GlobalConfig();
        globalConfig.setMetaObjectHandler(new MyMetaObjectHandler());
        return globalConfig;
    }
}

创建实体类

在实体类中,可以声明自动填充的字段,并在这个字段上加上 @TableField 注解来指定列名,并设置 fill 参数为 FieldFill.INSERTFieldFill.UPDATE

示例实体类:

@Data
@TableName(value = "user")
public class User {

    @TableId(type = IdType.AUTO)
    private Long id;

    private String name;

    @TableField(fill = FieldFill.INSERT)
    private Date createTime;

    @TableField(fill = FieldFill.UPDATE)
    private Date updateTime;
}

使用自动填充

使用 MyBatis-Plus 提供的 CRUD 操作时,自动填充的字段会自动填充它们的值。

示例代码:

User user = new User();
user.setName("张三");
userMapper.insert(user); // createTime 字段会自动填充为当前时间

User updateUser = new User();
updateUser.setId(1L);
updateUser.setName("李四");
userMapper.updateById(updateUser); // updateTime 字段会自动填充为当前时间

以上就是 MyBatis-Plus 逻辑删除和字段自动填充的实现攻略。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:MyBatis-Plus逻辑删除和字段自动填充的实现 - Python技术站

(0)
上一篇 2023年6月25日
下一篇 2023年6月25日

相关文章

  • php消息队列详解

    PHP消息队列详解 消息队列是一种在分布式系统中实现异步通信的机制。它可以将消息发送到队列中,然后由消费者步地从列中获取消息并进行处理。PHP中有多种消息队列实现,包括RabbitMQ、Kafka、Redis等。本文将绍如何使用PHP实现消息队列,并提供两个示例说明。 RabbitMQ RabbitMQ是一款开源的消息队列软件,它实现了AMQP(高级消息队列…

    other 2023年5月7日
    00
  • 关于C++11中限定作用域的枚举类型的问题

    关于C++11中限定作用域的枚举类型的问题 在C++11中,引入了限定作用域的枚举类型(Scoped Enum),它们提供了更好的类型安全性和可读性。本攻略将详细介绍限定作用域的枚举类型的使用方法,并提供两个示例说明。 1. 定义限定作用域的枚举类型 限定作用域的枚举类型使用关键字enum class或enum struct来定义。下面是一个示例: enum…

    other 2023年8月19日
    00
  • 新公链CANTO生态 完全去中心化 免费DEX 算稳币NOTE等

    CANTO是一个全新的公链生态,完全去中心化,提供免费的去中心化交易所(DEX)和算稳币(NOTE)等服务,以下是CANTO生态的完整攻略: 准备 在使用CANTO之前,需要先准备一些基础设施: 安装最新版的 CANTO 客户端 创建一个钱包地址并备份私钥 获取一些 CANTO 的代币(简称 CTO) 安装CANTO客户端 CANTO客户端是连接CANTO网…

    other 2023年6月26日
    00
  • linux下制作ISO文件

    Linux下制作ISO文件的完整攻略 什么是ISO文件? ISO文件是一种光盘镜像文件格式,包含着完整的光盘内容,可以保存在计算机上或者刻录为光盘。制作ISO文件的一个主要应用就是用于操作系统安装介质的制作。 制作ISO文件的工具 Linux操作系统下有多种可用的工具可以用来制作ISO文件,常用的有: Genisoimage:这是一个开源的光盘镜像生成工具,…

    other 2023年6月27日
    00
  • Vuex 使用及简单实例(计数器)

    Vuex 使用及简单实例(计数器) 什么是Vuex Vuex是一个专门为Vue.js应用程序开发的状态管理模式。它可以解决多个组件共享状态的问题,让我们更好的管理各个组件之间的状态和数据。 Vuex的核心概念 Vuex先简明扼要的介绍一下它的核心概念,下面将对这些概念进行进一步的解释。 State: Vuex的状态管理模式仓库是由一个全局单例对象组成,称为s…

    other 2023年6月27日
    00
  • 汇编语言功能字符串大小写转换实现实例详解

    汇编语言功能字符串大小写转换实现实例详解 本攻略将详细讲解如何使用汇编语言实现字符串大小写转换的功能。我们将使用x86架构的汇编语言进行示例说明。 1. 简介 字符串大小写转换是一种常见的字符串处理操作,它可以将字符串中的字母从大写转换为小写,或者从小写转换为大写。在汇编语言中,我们可以通过操作字符串的ASCII码来实现这一功能。 2. 实现步骤 下面是实现…

    other 2023年8月16日
    00
  • win10 Build 9865怎么更新升级? win10 9865下载更新教程

    Win10 Build 9865 更新升级攻略 1. 检查更新 首先,我们需要检查是否有可用的更新。请按照以下步骤进行操作: 打开“设置”应用程序。你可以通过点击任务栏上的“开始”按钮,然后点击“设置”图标来打开它。 在“设置”窗口中,点击“更新和安全”选项。 在左侧导航栏中,选择“Windows 更新”。 在右侧窗格中,点击“检查更新”按钮。 示例说明:如…

    other 2023年8月3日
    00
  • ASP.NET 动态写入服务器端控件

    当ASP.NET页面需要动态组装控件时,可以利用服务器端控件动态写入HTML标记来实现。通常使用Panel控件或Literal控件来实现。 下面是使用Panel控件和Literal控件来实现在服务端动态写入HTML标记的两个示例。 示例一:使用Panel控件动态添加控件 1.在aspx页面上添加一个Panel控件,并设置它的ID为panel1。 <as…

    other 2023年6月27日
    00
合作推广
合作推广
分享本页
返回顶部