Mybatis-plus自动填充不生效或自动填充数据为null原因及解决方案

下面将详细讲解"Mybatis-plus自动填充不生效或自动填充数据为null原因及解决方案"的攻略。

一、问题描述

当我们在使用Mybatis-plus的自动填充功能时,有时候会遇到自动填充不生效或自动填充数据为null的情况,这时候我们需要找到问题所在并进行解决。

二、原因分析

自动填充不生效或自动填充数据为null的原因通常有以下几种情况:

  1. 没有开启自动填充功能。 在Mybatis-plus中,自动填充功能需要在实体类中使用注解进行配置,如果没有进行配置则无法使用自动填充功能。

  2. 自动填充字段的属性值为null。 Mybatis-plus自动填充功能需要实体类的属性值,在sql执行前进行自动填充,如果属性值为null,则无法自动填充。

  3. 自动填充注解使用不正确。 Mybatis-plus提供了多个自动填充注解,注解使用不正确也会导致自动填充不生效或自动填充数据为null。

三、解决方案

针对上述问题所列出的原因,下面我们分别提供解决方案:

  1. 配置自动填充功能

在实体类中开启自动填充功能需要使用Mybatis-plus提供的注解。例如,我们可以在需要自动填充创建时间和更新时间的实体类中添加如下的注解:

@Data
public class User {
    @TableId
    private Long id;

    private String name;

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

    @TableField(fill = FieldFill.INSERT_UPDATE)
    private LocalDateTime updateTime;
}

其中,@TableField(fill = FieldFill.INSERT)表示在插入数据时自动填充createTime属性,@TableField(fill = FieldFill.INSERT_UPDATE)表示在插入和更新数据时自动填充updateTime属性。

  1. 验证自动填充字段的属性值

如果自动填充字段的属性值为null,则无法自动填充。因此,我们需要在插入或更新数据前,确保自动填充字段的属性值不为null。例如,我们可以在service层的insert方法中添加如下代码:

@Service
public class UserServiceImpl extends ServiceImpl<UserMapper, User> implements UserService {
    @Override
    public boolean save(User entity) {
        entity.setCreateTime(LocalDateTime.now());
        entity.setUpdateTime(LocalDateTime.now());
        return super.save(entity);
    }
}
  1. 使用正确的自动填充注解

Mybatis-plus提供了多个自动填充注解,为了避免使用不正确的注解而导致自动填充不生效或自动填充数据为null,我们需要使用正确的注解。以下是常用的自动填充注解:

  • @TableField(fill = FieldFill.INSERT):插入数据时自动填充字段的值

  • @TableField(fill = FieldFill.UPDATE):更新数据时自动填充字段的值

  • @TableField(fill = FieldFill.INSERT_UPDATE):插入和更新数据时自动填充字段的值

四、示例说明

以下是针对自动填充不生效或自动填充数据为null的解决方案的两个示例说明:

示例1

在实体类中没有配置自动填充,导致自动填充不生效。这时候我们需要在实体类中添加相应的注解来开启自动填充功能。例如,如下User实体类中,我们需要添加createTime和updateTime属性的自动填充注解。

@Data
public class User {
    @TableId
    private Long id;

    private String name;

    private LocalDateTime createTime;

    private LocalDateTime updateTime;
}

添加自动填充注解后的实体类代码如下:

@Data
public class User {
    @TableId
    private Long id;

    private String name;

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

    @TableField(fill = FieldFill.INSERT_UPDATE)
    private LocalDateTime updateTime;
}

示例2

在插入数据时,自动填充字段的属性值为null,导致自动填充不生效。这时候我们需要在插入数据前,对自动填充字段的属性值进行设置。例如,如下的UserServiceImpl中,我们在save方法中对自动填充字段的属性值进行设置。

@Service
public class UserServiceImpl extends ServiceImpl<UserMapper, User> implements UserService {
    @Override
    public boolean save(User entity) {
        entity.setCreateTime(LocalDateTime.now());
        entity.setUpdateTime(LocalDateTime.now());
        return super.save(entity);
    }
}

五、总结

以上就是关于"Mybatis-plus自动填充不生效或自动填充数据为null原因及解决方案"的攻略。我们可以通过配置自动填充功能、验证自动填充字段的属性值或使用正确的自动填充注解来解决自动填充不生效或自动填充数据为null的问题。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Mybatis-plus自动填充不生效或自动填充数据为null原因及解决方案 - Python技术站

(0)
上一篇 2023年5月18日
下一篇 2023年5月18日

相关文章

  • @Transactional注解异常报错之多数据源详解

    当使用 @Transactional 注解时,可能会遇到多数据源的异常问题。本篇攻略将会详细讲解这个问题的根本原因并且提供两个示例来说明。 1. 什么是多数据源 多数据源即指一个系统维护了多个数据库,每个数据库可能拥有不同的表或者对象。在应用程序中,连接各个数据库的连接信息通常是不同的。 2. 问题描述 当使用 @Transactional 注解时,会抛出异…

    database 2023年5月18日
    00
  • 比较全面的C 、Java、JavaScript中的正则表达式详解

    比较全面的C、Java、JavaScript中的正则表达式详解 什么是正则表达式? 正则表达式是一种语法规则,用于描述字符串的匹配模式。它可以帮助我们从文本中找到我们需要的内容,或者检查字符串是否符合特定的格式。 正则表达式通常包含模式和标志两部分。模式是用来描述匹配规则的,标志则是用来控制匹配方式的。 正则表达式的语法 1. 基础语法 在正则表达式中,有许…

    database 2023年5月21日
    00
  • 我又和redis超时杠上了

    身为程序员,排查问题的能力很重要,本文将展现一次自身实际开发中的遇到问题时的排查经历,排错就像侦探探案的过程,逐步抽丝剥茧,从而看到现象背后的本质问题。 我又和redis超时杠上了 服务监控系列文章 服务监控系列视频 背景 经过上次redis超时排查,并联系云服务商解决之后,redis超时的现象好了一阵子,但是最近又有超时现象报出,但与上次不同的是,这次超时…

    Redis 2023年4月13日
    00
  • 探讨Mysql中OPTIMIZE TABLE的作用详解

    探讨Mysql中OPTIMIZE TABLE的作用详解 概述 OPTIMIZE TABLE 命令用于优化 MySQL 中表的空间,从而提高数据库的读写性能。运行 OPTIMIZE TABLE 命令时,MySQL 将对表进行完整的扫描,其实质是将原表复制建立一个新表再将数据插入其中,再临时重命名为原表,此时原表被清空,并获得新的索引等元数据信息,从而可以获得更…

    database 2023年5月19日
    00
  • linux二进制通用包安装mysql5.6.20教程

    关于“linux二进制通用包安装mysql5.6.20教程”的完整攻略,我将分为以下几个部分进行详细讲解。 一、准备工作 1. 下载MySQL二进制通用包 首先,我们需要从MySQL官网(https://dev.mysql.com/downloads/mysql/5.6.html#downloads)下载MySQL二进制通用包。下载时需要注意操作系统和系统架…

    database 2023年5月22日
    00
  • 列出SQL Server中具有默认值的所有字段的语句

    要列出 SQL Server 数据库中具有默认值的所有字段,可以使用以下两种方法。 方法一:查询系统表 sys.columns 可以通过查询系统表 sys.columns,以获取具有默认值的列信息。 SELECT OBJECT_SCHEMA_NAME(c.object_id) AS [Schema], OBJECT_NAME(c.object_id) AS …

    database 2023年5月21日
    00
  • linux查看redis安装路径

    ## linux查看redis安装路径 redis-cli -h 127.0.0.1 -p 6379redis-cli monitor > redis2.log /usr/local/redis-3.2.5/src/redis-server /usr/local/redis-3.2.5/redis.conf [root@my-test-01 ~]$fr…

    Redis 2023年4月12日
    00
  • 深度解析MySQL 5.7之临时表空间

    深度解析MySQL 5.7之临时表空间攻略 什么是MySQL 5.7临时表空间? MySQL 5.7引入了临时表空间的概念,它是一个专门用于存储临时表数据的区域,其作用是提高查询性能,避免使用磁盘临时文件。 临时表空间可以是磁盘中的一个文件,也可以是内存中的一个对象。MySQL会根据配置和需要自动选择合适的方式。 如何配置临时表空间? 配置内存临时表空间 可…

    database 2023年5月22日
    00
合作推广
合作推广
分享本页
返回顶部