当前使用版本(必填,否则不予处理)

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());