MybatisPlus自动填充功能不生效
时间: 2025-07-10 20:06:12 浏览: 5
### MyBatisPlus 自动填充功能不生效的原因分析
当遇到MyBatisPlus自动填充功能不生效的情况时,可能由多种因素引起。具体原因包括但不限于实体类字段未正确标注、全局配置缺失或错误、多数据源环境下配置不当等问题。
#### 实体类字段未正确标注
为了使MyBatisPlus能够识别并处理需要自动填充的字段,在对应的JavaBean属性上应添加`@TableField(fill = FieldFill.INSERT_UPDATE)`注解来指定该字段需在插入和更新操作时被自动填充[^1]。
```java
@TableId(type = IdType.AUTO)
private Long id;
@TableField(fill = FieldFill.INSERT_UPDATE)
private Date updateTime;
```
#### 全局配置缺失或错误
确保已经在Spring Boot项目的application.properties文件中启用了MyBatisPlus的相关特性:
```properties
mybatis-plus.global-config.db-config.id-type=auto
mybatis-plus.global-config.db-config.field-strategy=not_empty
```
还需确认已注册了MetaObjectHandler处理器用于实现具体的自动填充逻辑。通过继承BaseMapper接口的方式创建DAO层接口,并确保其扫描路径已被纳入到Spring组件扫描范围内[^2]。
```java
@Component
public class MyMetaObjectHandler implements MetaObjectHandler {
@Override
public void insertFill(MetaObject metaObject) {
this.strictInsertFill(metaObject, "createTime", LocalDateTime.class, LocalDateTime.now());
this.strictInsertFill(metaObject, "updateTime", LocalDateTime.class, LocalDateTime.now());
}
@Override
public void updateFill(MetaObject metaObject) {
this.strictUpdateFill(metaObject, "updateTime", LocalDateTime.class, LocalDateTime.now());
}
}
```
#### 多数据源环境下的特殊考虑
如果应用程序涉及多个数据库连接,则对于每一个单独的数据源都应当分别设置好各自的SqlSessionFactory实例及其关联的对象工厂bean。此时需要注意的是,针对不同DataSource所构建出来的MapperFactoryBean对象也必须各自携带一套完整的自定义元数据处理器(即上述提到过的MetaObjectHandler),这样才能保证各个库表之间的字段可以正常地执行自动赋值操作[^3]。
```xml
<bean id="dataSourceOne" ... />
<bean id="sqlSessionFactoryOne"
class="org.mybatis.spring.SqlSessionFactoryBean">
<!-- 配置其他参数 -->
</bean>
<bean name="mapperScannerConfigurerOne"
class="org.mybatis.spring.mapper.MapperScannerConfigurer">
<property name="basePackage" value="com.example.repository.one"/>
<property name="sqlSessionFactoryBeanName" ref="sqlSessionFactoryOne"/>
</bean>
<!-- 对于第二个数据源重复以上过程 -->
@Bean(name = {"metaObjectHandlerOne"})
public MetaObjectHandler getMetaObjectHandlerForDSOne() {
return new CustomizedMetaObjectHandler();
}
// 同样为另一个数据源提供类似的bean定义...
```
阅读全文
相关推荐


















