下面将详细讲解"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的问题。