MybatisPlus自动填充字段@TableField(fill = FieldFill.INSERT)为null解决方法

文章主要讨论了MybatisPlus中自动填充字段功能可能出现的问题及解决方法,包括检查@TableFill注解、确保MetaObjectHandler实现类被扫描到、更新操作时对象不能为空、配置sqlSessionFactory以绑定填充器以及Mapper接口继承BaseMapper以启用自动填充。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

目录

1检查@TableFill(fill = FieldFill.INSERT) 这个注解是否添加正确,实现MetaObjectHander的类是否被启动类扫描到。

2 update(T t,Wrapper updateWrapper)时t不能为空,否则自动填充失效

3当自定义mapper方法需要走填充时,建议按下列注解方式添加参数注解(如果使用编译参数保留的情况下,变量名字与注解名字保持一致也行)

4 MybatisPlusAutoConfiguration.sqlSessionFactory()内部MybatisSqlSessionFactoryBean绑定填充器失败。

5MybatisMapperMethod.execute(SqlSession sqlSession, Object[] args)内部执行sqlSession.insert(this.command.getName(), param)方法没有填充字段。


1检查@TableFill(fill = FieldFill.INSERT) 这个注解是否添加正确,实现MetaObjectHander的类是否被启动类扫描到。
2 update(T t,Wrapper updateWrapper)时t不能为空,否则自动填充失效
3当自定义mapper方法需要走填充时,建议按下列注解方式添加参数注解(如果使用编译参数保留的情况下,变量名字与注解名字保持一致也行)
数据类型注解示例
Collection@Param("collection") 或 @Param("coll")saveXxx(@Param("collection") Collection h2Users)

List

@Param("list")saveXxx(@Param("list") List h2Users)
Array@Param("array")saveXxx(@Param("array") H2User[] h2Users)
实体类@Param("et")saveXxx(@Param("et") H2User h2Users)

多参数填充示例:

 insertFillByCustomMethod1(H2User h2User);
 insertFillByCustomMethod8(H2User[] h2Users);
 insertFillByCustomMethod6(@Param("coll") Collection<H2User> h2User);
 insertFillByCustomMethod5(@Param("collection") Collection<H2User> h2User);
 insertFillByCustomMethod7(@Param("list") List<H2User> h2User);
 insertFillByCustomMethod9(@Param("array") H2User[] h2Users);
 //et标记的会填充,coll虽然是特殊的key值,但不属于实体,所以不会处理
 updateFillByCustomMethod2(@Param("coll") Collection<Long> ids, @Param("et") H2User h2User);  
 updateFillByCustomMethod4(@Param("colls") Collection<Long> ids, @Param("et") H2User h2User);

无法填充示例:

//方法虽然与上面方法一致,但key值不满足填充条件,需要将user换成et才能正确填充 
updateFillByCustomMethod3(@Param("coll") Collection<Long> ids, @Param("user") H2User h2User); 
MybatisPlusAutoConfiguration.sqlSessionFactory()内部MybatisSqlSessionFactoryBean绑定填充器失败。

解决方案:

@Configuration

public class MybatisPlusConfig {
    /**
     * MyBatis绑定字段值自动填充
     * @return
     */
    @Bean
    public MybatisSqlSessionFactoryBean sqlSessionFactory(DataSource dataSource) throws Exception  {
        MybatisSqlSessionFactoryBean mybatisPlus = new MybatisSqlSessionFactoryBean();
        //加载数据源
        mybatisPlus.setDataSource(dataSource);
        //全局配置
        GlobalConfig globalConfig  = new GlobalConfig();
        //配置填充器
        globalConfig.setMetaObjectHandler(new MyMetaObjectHandler());
        mybatisPlus.setGlobalConfig(globalConfig);
        return  mybatisPlus;
    }
}
5MybatisMapperMethod.execute(SqlSession sqlSession, Object[] args)内部执sqlSession.insert(this.command.getName(), param)方法没有填充字段。

解决方法:

        Mapper/Dao接口继承BaseMapper类

@Mapper
public interface MediaFilesMapper extends BaseMapper<MediaFiles> {

}

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值