返回顶部
首页 > 资讯 > 后端开发 > Python >MyBatis-Plus逻辑删除和字段自动填充的实现
  • 592
分享到

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

MyBatis-Plus逻辑删除MyBatis-Plus字段自动填充 2022-11-13 14:11:15 592人浏览 八月长安

Python 官方文档:入门教程 => 点击学习

摘要

目录一、ID生成策略1、使用@TableId注解2、全局ID生成策略二、逻辑删除1、全局配置2、使用@TableLogic注解三、字段自动填充1、指定字段自动填充2、自定义MetaO

一、ID生成策略

1、使用@TableId注解

@TableId注解:主键注解

使用位置:实体类主键字段。

@Data
@ToString
@TableName("t_user")
public class UserDO {

	@TableId(value = "id", type = IdType.AUTO)
	private Long id;
    ...
}

2、全局ID生成策略

使用注解是针对一个POJO的。如果我们全局使用同样的 ID生成策略。那我们可以在全局配置文件中配置。就不需要在每个 POJO上使用 主键@TableId注解了。

mybatis-plus:
  global-config:
    db-config:
      id-type: auto

二、逻辑删除

官方文档-逻辑删除:https://baomidou.com/pages/6b03c5/

逻辑删除: 通常会在表里添加一个逻辑删除的字段,比如 enabled(1默认有效,0无效)。

MyBatis-Plus会在用户调用删除操作时将数据修改 UPDATE set enabled = 0, 在查询的时候会自动拼接只查 where enabled=1的数据。

1、全局配置

在YAML配置文件中添加全局配置

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)

不推荐使用全局配置,使用 @TableLogic注解见名知意。

2、使用@TableLogic注解

@TableLogic注解:表字段逻辑处理注解(逻辑删除)。

1)表中添加 enabled字段

ALTER TABLE `t_user` 
ADD COLUMN `enabled` tinyint(1) NOT NULL DEFAULT 1 COMMENT '是否有效(1-有效,0-无效)';

2)在POJO实体类字段上加上 @TableLogic注解。

	
	//@TableLogic
	@TableLogic(value = "1", delval = "0")
	private Integer enabled;

到此,逻辑删除就配置好了,接下来测试一下删除和查询。

	@Test
	public void testRemoveById() {
		System.out.println(("----- removeById method test ------"));
		boolean remove = userService.removeById(12L);
        
		System.out.println("remove = " + remove);
	}

	@Test
	public void testGetById() {
		System.out.println(("----- getById method test ------"));
		UserDO userDO = userService.getById(12L);

		System.out.println("userDO = " + userDO);
	}

三、字段自动填充

官方文档-自动填充功能:Https://baomidou.com/pages/4c6bcf/

项目中,一般我们都会定义 create_time和update_time字段。针对这两个字段,每次CRUD操作时,我们都需要手动赋值或者数据库默认值。MyBatis-Plus提供了给字段自动填充数据的功能。

`create_time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
`update_time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '修改时间',

使用 MyBatis-Plus的自动填充功能,需要指定 fill类型,并且指定 自定义填充信息 MetaObjectHandler。

1、指定字段自动填充

在POJO中,指定 create_time和update_time字段为自动填充。

	 @TableField(value = "create_time", fill = FieldFill.INSERT)
	//@TableField(value = "create_time")
	private Date createTime;

	 @TableField(value = "update_time", fill = FieldFill.INSERT_UPDATE)
	//@TableField(value = "update_time")
	private Date updateTime;

fill类型的值如下:

注意:如果指定了 fill为后面三个时,必须显示设置值。否则为报错:Column 'create_time' cannot be null。如果我们不显示指定设置值,我们必须定义 MetaObjectHandler。

2、自定义MetaObjectHandler

@Slf4j
@Component
public class MyMetaObjectHandler implements MetaObjectHandler {

    @Override
    public void insertFill(MetaObject metaObject) {
        log.info("start insert fill ....");
        
        this.strictInsertFill(metaObject, "createTime", Date.class, new Date());
		//this.setFieldValByName("createTime", new Date(),metaObject);
        // 或者
        this.strictInsertFill(metaObject, "updateTime", () -> new Date(), Date.class);
    }

    @Override
    public void updateFill(MetaObject metaObject) {
        log.info("start update fill ....");
        this.strictInsertFill(metaObject, "updateTime", () -> new Date(), Date.class);
    }
}

3、测试

1)测试保存

	@Test
	public void testSave() {
		System.out.println(("----- save method test ------"));
		UserDO userDO = new UserDO();
		userDO.setUserName("赵云save fill");
		userDO.setAge(20);
		userDO.setHeight(1.88);
		userDO.setEmail("zhaoyun@123.com");
		boolean save = userService.save(userDO);

		System.out.println("save = " + save);
		System.out.println("userDO = " + userDO);
	}

2)测试删除

	@Test
	public void testRemoveById() {
		System.out.println(("----- removeById method test ------"));
		boolean remove = userService.removeById(111L);
		System.out.println("remove = " + remove);
	}

四、执行SQL分析打印

生产环境不推荐使用,开发环境可以使用。

官方文档-自动填充功能:https://baomidou.com/pages/833fab/

引入 p6spy依赖:

    <!-- https://mvnrepository.com/artifact/p6spy/p6spy -->
    <dependency>
      <groupId>p6spy</groupId>
      <artifactId>p6spy</artifactId>
      <version>3.9.1</version>
    </dependency>

1、添加 spy.properties配置文件

#3.2.1以上使用
modulelist=com.baomidou.mybatisplus.extension.p6spy.MybatisPlusLogFactory,com.p6spy.engine.outage.P6OutageFactory
#3.2.1以下使用或者不配置
#modulelist=com.p6spy.engine.logging.P6LogFactory,com.p6spy.engine.outage.P6OutageFactory
# 自定义日志打印
logMessageFORMat=com.baomidou.mybatisplus.extension.p6spy.P6SpyLogger
#日志输出到控制台
appender=com.baomidou.mybatisplus.extension.p6spy.StdoutLogger
# 使用日志系统记录 sql
#appender=com.p6spy.engine.spy.appender.Slf4JLogger
# 设置 p6spy driver 代理
dereGISterdrivers=true
# 取消JDBC URL前缀
useprefix=true
# 配置记录 Log 例外,可去掉的结果集有error,info,batch,debug,statement,commit,rollback,result,resultset.
excludecateGories=info,debug,result,commit,resultset
# 日期格式
dateformat=yyyy-MM-dd HH:mm:ss
# 实际驱动可多个
#driverlist=org.h2.Driver
# 是否开启慢SQL记录
outagedetection=true
# 慢SQL记录标准 2 秒
outagedetectioninterval=2

2、修改数据源配置

修改驱动类和 url的前缀。

spring:
  ## 数据源配置
  datasource:
    driver-class-name: com.p6spy.engine.spy.P6SpyDriver # com.Mysql.cj.jdbc.Driver
    # url: jdbc:mysql://localhost:3306/mybatis_db?useUnicode=true&characterEncoding=utf8&useSSL=true&serverTimezone=GMT
    url: jdbc:p6spy:mysql://localhost:3306/mybatis_db?useUnicode=true&characterEncoding=utf8&useSSL=true&serverTimezone=GMT
    username: root
    passWord: 123456

3、测试查询

多了红色的部分,其实我们使用 MyBatisLogFormat插件也是可以得到真实执行的SQL语句。

到此这篇关于MyBatis-Plus逻辑删除和字段自动填充的实现的文章就介绍到这了,更多相关MyBatis-Plus逻辑删除和字段自动填充内容请搜索编程网以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程网!

--结束END--

本文标题: MyBatis-Plus逻辑删除和字段自动填充的实现

本文链接: https://lsjlt.com/news/172145.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • MyBatis-Plus逻辑删除和字段自动填充的实现
    目录一、ID生成策略1、使用@TableId注解2、全局ID生成策略二、逻辑删除1、全局配置2、使用@TableLogic注解三、字段自动填充1、指定字段自动填充2、自定义MetaO...
    99+
    2022-11-13
    MyBatis-Plus逻辑删除 MyBatis-Plus 字段自动填充
  • mybatis plus CU如何实现自动填充和软删除自动填充
    本篇内容主要讲解“mybatis plus CU如何实现自动填充和软删除自动填充”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“mybatis plus CU如何实现自动填充和软删除自动填充”吧!...
    99+
    2023-06-20
  • mybatis plus CU自动填充 和 软删除自动填充的实现方法
    说明 CU 是 CRUD 中的创建和修改 本文实现以下需求效果 创建数据时自动填充 createTime 更新数据时自动填充 updateTime(每次修改都自动填...
    99+
    2024-04-02
  • 关于mybatis-plus逻辑删除自动填充更新时间的问题
    目录前言问题发现寻找原因解决方法方法一方法二补充写法前言 mybatis-plus是对mybatis的增强,mybatis-plus更像是面向对象编程,数据库基本CRUD的操作可以不...
    99+
    2024-04-02
  • MyBatis-Plus如何实现字段自动填充功能
    这篇文章给大家分享的是有关MyBatis-Plus如何实现字段自动填充功能的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。一、前言在项目中,我们有一些公共的字段需要做修改如:gmt_create:创建时间creat...
    99+
    2023-06-25
  • MyBatis-Plus实现字段自动填充功能的示例
    目录一、前言二、实现1. 实体类2. 公用字段 - 使用注解填充字段3. 自定义MyMetaObjectHandler字段自动填充处理类继承MetaObjectHandler一、前言...
    99+
    2024-04-02
  • MyBatis-Plus实现公共字段自动填充功能详解
    目录1.问题分析2.实现步骤3. 实现字段全局填充1.问题分析 我们在开发中经常遇到多个实体类有共同的属性字段,例如在用户注册时需要设置创建时间、创建人、修改时间、修改人等字段,在用...
    99+
    2022-11-13
    MyBatis-Plus字段自动填充 MyBatis-Plus字段填充 MyBatis-Plus 公共字段自动填充
  • Mybatis-Plus自动填充更新操作相关字段的实现
    目录场景介绍 自动填充处理器 Mybatis-Plus配置类 配置实体类中相关字段的自动填充策略 在阿里开发手册的建表规约中有说明,数据库表中应该都要有create_time、upd...
    99+
    2024-04-02
  • springboot+mybatis-plus+oracle实现逻辑删除
    最近在做一个前后端分离的小项目,需要删除用户表的用户,但是用户再别的表做了外键,所以只能做成逻辑删除,一通百度查资料后得以实现: 1、用户实体类 package com.sie....
    99+
    2024-04-02
  • mybatis plus实现分页逻辑删除
    一、分页 通过mybatis-plus实现分页,也是很简单,插件大法。 1、配置分页插件 把分页的插件也配置到统一的配置类里: @Configuration // 配置扫描mappe...
    99+
    2024-04-02
  • MyBatis-Plus怎么实现逻辑删除
    这篇“MyBatis-Plus怎么实现逻辑删除”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“MyBatis-Plus怎么实现...
    99+
    2023-06-30
  • Spring Boot 集成 Mybatis Plus 自动填充字段的实例详解
    一般在表设计的时候,都会在表中添加一些系统字段,比如 create_time、update_time等。 阿里巴巴开发手册中也有这样的提示,如果对于这些公共字段可以进行统一处理,不...
    99+
    2024-04-02
  • mybatis-plus新增/修改如何实现自动填充指定字段
    目录mybatis-plus 新增/修改 自动填充指定字段1.需要修改的字段在模型类上添加2.新建一个MetaObjectHandler的实现类通用字段自动填充的最佳实践总结一、调整...
    99+
    2024-04-02
  • MyBatis-Plus实现逻辑删除的示例代码
    目录一、引言二、具体实现步骤一:首先我们需要配置未删除、已删除分别标识的状态码是什么,这里采用的yml格式。步骤二:在实体类对应的字段上加上注解@TableLogic即可。步骤三:测...
    99+
    2024-04-02
  • 如何理解Spring Boot集成Mybatis Plus自动填充字段
    这篇文章主要讲解了“如何理解Spring Boot集成Mybatis Plus自动填充字段”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“如何理解Spring...
    99+
    2024-04-02
  • 如何在Spring Boot中利用Mybatis Plus 自动填充字段
    这篇文章将为大家详细讲解有关如何在Spring Boot中利用Mybatis Plus 自动填充字段,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。加入依赖下面就通过 MyBatis Plus...
    99+
    2023-06-09
  • Mybatis-Plus如何自动填充更新操作相关字段
    小编给大家分享一下Mybatis-Plus如何自动填充更新操作相关字段,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!场景介绍在项目的数据表设计中,每张表都有cre...
    99+
    2023-06-25
  • MyBatis-Plus的物理删除和逻辑删除(使用场景)
    物理删除:真实删除,将数据从数据库中删除,删除后查询不到被删除的数据 逻辑删除:假删除,方便删除之后的数据恢复 在表中添加一个status字段,作为删除的标准,每次删除时,修改标志...
    99+
    2024-04-02
  • springboot中怎么利用mybatis-plus和oracle实现逻辑删除
    springboot中怎么利用mybatis-plus和oracle实现逻辑删除,相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。用户实体类package com.sie...
    99+
    2023-06-20
  • mybatisPlus填坑之逻辑删除的实现
    网上大部分的关于mybatisPlus的逻辑删除的配置介绍都是有问题的,原因可能是官网已经做了更新!!!错误如图: 正确的配置是: SpringBoot 配置方式: applica...
    99+
    2024-04-02
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作