Mybatisplus自动填充功能失效
通过SpringBoot框架集成 mybatis-plus
首先导入需要的依赖
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus-boot-starter</artifactId>
<version>3.3.2</version>
</dependency>
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus-generator</artifactId>
<version>3.3.2</version>
</dependency>
在appication.yml添加相关配置
mybatis-plus configuration:
log-impl: org.apache.ibatis.logging.stdout.StdOutImpl//打印sql语句
mapper-locations: com/example/mapper/xml/*.xml // 配置mapper的扫描,找到所有的mapper.xml映射文件
创建实体类对象
@Data
@AllArgsConstructor
@NoArgsConstructor
public class OrderMaster implements Serializable {
@TableId(type = IdType.ASSIGN_UUID)//自动生成
private String orderId;
private String Name;
private String Phone;
private String Address;
/**
* 创建时间
*/
@TableField(fill = FieldFill.INSERT)
private LocalDateTime createTime;
/**
* 修改时间
*/
@TableField(fill = FieldFill.INSERT_UPDATE)
private LocalDateTime updateTime;
}
按照官方文档进行配置
要记得添加@Component注解
@Component
//自动填充配置
public class FillHandler implements MetaObjectHandler {
@Override
public void insertFill(MetaObject metaObject) {
log.info("开始填充时间");
this.strictInsertFill(metaObject, "createTime", LocalDateTime.class, LocalDateTime.now());
this.setFieldValByName("updateTime", LocalDateTime.now(),metaObject);
}
@Override
public void updateFill(MetaObject metaObject) {
this.setFieldValByName("updateTime", LocalDateTime.now(),metaObject);
}
}
正常来说到了这一步,一般情况下就好了
常见的错误有这几种
- 日期类不一致导致 创建日期、更新日期 为 null
- @Component 没有被扫到,可以看下启动类的位置,启动类扫描的包是在其所在包以下的包
- 还有就是填充的字段属性不一致,比如Date和LocalDateTime
- 检查MetaObjectHandler实现类是否使用@Component
- 实体类字段使用注解 @TableField(fill = FieldFill.INSERT)
可惜我的问题不是以上几种,于是我打了断点,发现根本没有执行到 MetaObjectHandler的实现类=>FillHandler
于是我输出了所有的bean,发现MetaObjectHandler并没有注入进去。
这里的原因在于mybatis有自己默认的配置文件,所以我们自定义的没有生效,自定义Bean sqlSessionFactory 影响到了 globalConfig ,导致配置失效。
添加这样一个配置类即可文章来源:https://www.toymoban.com/news/detail-427735.html
import com.baomidou.mybatisplus.core.config.GlobalConfig;
import com.baomidou.mybatisplus.core.toolkit.GlobalConfigUtils;
import com.baomidou.mybatisplus.extension.spring.MybatisSqlSessionFactoryBean;
import com.example.handler.FillHandler;
import org.apache.ibatis.session.SqlSessionFactory;
import org.springframework.context.annotation.Bean;
import javax.sql.DataSource;
public class sqlSessionFactory {
@Bean
public SqlSessionFactory sqlSessionFactory(DataSource dataSource) throws Exception {
MybatisSqlSessionFactoryBean mybatisSqlSessionFactoryBean = new MybatisSqlSessionFactoryBean();
//获取mybatis-plus全局配置
GlobalConfig globalConfig = GlobalConfigUtils.defaults();
//mybatis-plus全局配置设置元数据对象处理器为自己实现的那个
globalConfig.setMetaObjectHandler(new FillHandler());
mybatisSqlSessionFactoryBean.setDataSource(dataSource);
//mybatisSqlSessionFactoryBean关联设置全局配置
mybatisSqlSessionFactoryBean.setGlobalConfig(globalConfig);
return mybatisSqlSessionFactoryBean.getObject();
}
}
到这里就终于好了,这个问题困扰了我一整天,终于解决了!文章来源地址https://www.toymoban.com/news/detail-427735.html
到了这里,关于MyBatis-Plus,MetaObjectHandler没生效,完美解决的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!