下面将详细讲解Mybatis-plus自动填充不生效或自动填充数据为null原因及解决方案的攻略。
下面将详细讲解"Mybatis-plus自动填充不生效或自动填充数据为null原因及解决方案"的攻略。
一、问题描述
当我们在使用Mybatis-plus的自动填充功能时,有时候会遇到自动填充不生效或自动填充数据为null的情况,这时候我们需要找到问题所在并进行解决。
二、原因分析
自动填充不生效或自动填充数据为null的原因通常有以下几种情况:
-
没有开启自动填充功能。 在Mybatis-plus中,自动填充功能需要在实体类中使用注解进行配置,如果没有进行配置则无法使用自动填充功能。
-
自动填充字段的属性值为null。 Mybatis-plus自动填充功能需要实体类的属性值,在sql执行前进行自动填充,如果属性值为null,则无法自动填充。
-
自动填充注解使用不正确。 Mybatis-plus提供了多个自动填充注解,注解使用不正确也会导致自动填充不生效或自动填充数据为null。
三、解决方案
针对上述问题所列出的原因,下面我们分别提供解决方案:
- 配置自动填充功能
在实体类中开启自动填充功能需要使用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属性。
- 验证自动填充字段的属性值
如果自动填充字段的属性值为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);
}
}
- 使用正确的自动填充注解
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原因及解决方案
- 一文搞懂MySQL持久化和回滚的原理 2023-08-06
- Python Pandas创建Dataframe数据框的六种方法汇总 2023-07-28
- SQL Server还原完整备份和差异备份的操作过程 2023-12-04
- 批量备份还原导入与导出MongoDB数据方式 2023-07-15
- 使用Oracle进行数据库备份与还原 2023-07-24
- MongoDB数据库基本概念解析 2023-07-16
- MySQL系列理解运用union(all)与limit及exists关键字教程 2023-08-09
- PostgreSQL怎么创建分区表详解 2023-07-21
- 对PHP新手的一些建议(PHP学习经验总结) 2023-12-04
- SQL Server数据库判断最近一次的备份执行结果(最新推荐) 2023-07-29