目录
1检查@TableFill(fill = FieldFill.INSERT) 这个注解是否添加正确,实现MetaObjectHander的类是否被启动类扫描到。
2 update(T t,Wrapper updateWrapper)时t不能为空,否则自动填充失效
3当自定义mapper方法需要走填充时,建议按下列注解方式添加参数注解(如果使用编译参数保留的情况下,变量名字与注解名字保持一致也行)
4 MybatisPlusAutoConfiguration.sqlSessionFactory()内部MybatisSqlSessionFactoryBean绑定填充器失败。
1检查@TableFill(fill = FieldFill.INSERT) 这个注解是否添加正确,实现MetaObjectHander的类是否被启动类扫描到。
2 update(T t,Wrapper updateWrapper)时t不能为空,否则自动填充失效
3当自定义mapper方法需要走填充时,建议按下列注解方式添加参数注解(如果使用编译参数保留的情况下,变量名字与注解名字保持一致也行)
数据类型 | 注解 | 示例 |
Collection | @Param("collection") 或 | 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);
4 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> {
}