当前使用版本(必填,否则不予处理)
3.3.2
该问题是如何引起的?(确定最新版也有问题再提!!!)
多数据源下配置dbConfig.setUpdateStrategy(FieldStrategy.IGNORED); 使用updateById方法 为空的属性没有置空
重现步骤(如果有就写完整)
配置两个数据源: @Configuration @MapperScan(basePackages = {"com.jumper.cs.standard.mapper"} ,sqlSessionFactoryRef = "standardSqlSessionFactory", sqlSessionTemplateRef="standardSqlSessionTemplate") public class StandardDataSourceConfig {
@Bean(name = {"standardDataSource"})
@Primary
@ConfigurationProperties(prefix = "druid.standard")
public DruidDataSource dataSource() {
return DruidDataSourceBuilder.create().build();
}
@Bean(name = {"standardGlobalConfig"})
public GlobalConfig globalConfig(){
GlobalConfig globalConfig=new GlobalConfig();
GlobalConfig.DbConfig dbConfig=new GlobalConfig.DbConfig();
dbConfig.setUpdateStrategy(FieldStrategy.IGNORED);
globalConfig.setDbConfig(dbConfig);
return globalConfig;
}
@Bean(name = "standardMybatisConfiguration")
//@ConfigurationProperties(prefix = "mybatis-plus")
public MybatisConfiguration configuration(@Qualifier("standardGlobalConfig") GlobalConfig globalConfig){
MybatisConfiguration conf = new MybatisConfiguration();
conf.setLogImpl(StdOutImpl.class);
conf.setGlobalConfig(globalConfig);
return conf;
}
@Bean(name = "standardSqlSessionFactory")
@Primary
public SqlSessionFactory sqlSessionFactory(@Qualifier("standardDataSource") DataSource dataSource,
@Qualifier("standardMybatisConfiguration") MybatisConfiguration conf) throws Exception {
//final SqlSessionFactoryBean sessionFactory = new SqlSessionFactoryBean();
MybatisSqlSessionFactoryBean sessionFactory = new MybatisSqlSessionFactoryBean();
sessionFactory.setDataSource(dataSource);
sessionFactory.setConfiguration(conf);
// 设置mybatis的xml所在位置
sessionFactory.setMapperLocations(
new PathMatchingResourcePatternResolver().getResources("classpath*:mapper/standard/*Mapper.xml"));
return sessionFactory.getObject();
}
@Bean(name = "standardTransactionManager")
@Primary
public DataSourceTransactionManager transactionManager() {
return new DataSourceTransactionManager(this.dataSource());
}
@Bean("standardSqlSessionTemplate")
// 表示这个数据源是默认数据源
@Primary
public SqlSessionTemplate standardsqlsessiontemplate(
@Qualifier("standardSqlSessionFactory") SqlSessionFactory sessionfactory) {
return new SqlSessionTemplate(sessionfactory);
}
}
@Configuration @MapperScan(basePackages = {"com.jumper.cs.standard.mapper"} ,sqlSessionFactoryRef = "standardSqlSessionFactory", sqlSessionTemplateRef="standardSqlSessionTemplate") public class StandardDataSourceConfig {
@Bean(name = {"standardDataSource"})
@Primary
@ConfigurationProperties(prefix = "druid.standard")
public DruidDataSource dataSource() {
return DruidDataSourceBuilder.create().build();
}
@Bean(name = {"standardGlobalConfig"})
public GlobalConfig globalConfig(){
GlobalConfig globalConfig=new GlobalConfig();
GlobalConfig.DbConfig dbConfig=new GlobalConfig.DbConfig();
dbConfig.setUpdateStrategy(FieldStrategy.IGNORED);
globalConfig.setDbConfig(dbConfig);
return globalConfig;
}
@Bean(name = "standardMybatisConfiguration")
//@ConfigurationProperties(prefix = "mybatis-plus")
public MybatisConfiguration configuration(@Qualifier("standardGlobalConfig") GlobalConfig globalConfig){
MybatisConfiguration conf = new MybatisConfiguration();
conf.setLogImpl(StdOutImpl.class);
conf.setGlobalConfig(globalConfig);
return conf;
}
@Bean(name = "standardSqlSessionFactory")
@Primary
public SqlSessionFactory sqlSessionFactory(@Qualifier("standardDataSource") DataSource dataSource,
@Qualifier("standardMybatisConfiguration") MybatisConfiguration conf) throws Exception {
//final SqlSessionFactoryBean sessionFactory = new SqlSessionFactoryBean();
MybatisSqlSessionFactoryBean sessionFactory = new MybatisSqlSessionFactoryBean();
sessionFactory.setDataSource(dataSource);
sessionFactory.setConfiguration(conf);
// 设置mybatis的xml所在位置
sessionFactory.setMapperLocations(
new PathMatchingResourcePatternResolver().getResources("classpath*:mapper/standard/*Mapper.xml"));
return sessionFactory.getObject();
}
@Bean(name = "standardTransactionManager")
@Primary
public DataSourceTransactionManager transactionManager() {
return new DataSourceTransactionManager(this.dataSource());
}
@Bean("standardSqlSessionTemplate")
// 表示这个数据源是默认数据源
@Primary
public SqlSessionTemplate standardsqlsessiontemplate(
@Qualifier("standardSqlSessionFactory") SqlSessionFactory sessionfactory) {
return new SqlSessionTemplate(sessionfactory);
}
}
使用updateByID方法空字段没有置空
但是加了@TableField(updateStrategy = FieldStrategy.IGNORED)的字段为空时可以置空
报错信息
Comment From: leogan12
需要把GlobalConfig 设置到MybatisSqlSessionFactoryBean中 而不是MybatisConfiguration中 可以解决问题 /* * 全局自定义配置 / @Bean(name = "globalConfig") @ConfigurationProperties(prefix = "mybatis-plus.global-config") public GlobalConfig globalConfig() { return new GlobalConfig(); }
/ 当使用myBatis-plus的时候需要使用 MybatisSqlSessionFactoryBean */ MybatisSqlSessionFactoryBean sessionFactory = new MybatisSqlSessionFactoryBean(); sessionFactory.setDataSource(dataSource); sessionFactory.setConfiguration(configuration()); / 设置全局配置 */ sessionFactory.setGlobalConfig(globalConfig());