多数据源的情况下 MyMetaObjectHandler无效直接上代码 亲测有效在此只展示sqlserver mysql一样的道理
entity
@Data
@NoArgsConstructor
@AllArgsConstructor
@TableName("DCuser")
public class SqlUserEntity {
@TableId(value = "ID",type = IdType.AUTO)
private Long ID;
private String name;
private Integer age;
private String school;
private String remark;
@TableField(value = ("gmtCreate"), fill = FieldFill.INSERT)
private Date gmtCreate;
@TableField(value = ("gmtModified"),fill = FieldFill.INSERT_UPDATE)
private Date gmtModified;
}
数据源配置
@Data
@Configuration
@Component
@ConfigurationProperties(prefix = "sqlser.datasource.druid")
@MapperScan(basePackages = SqlServerDataBaseConfig.PACKAGE, sqlSessionFactoryRef = "sqlServerDataBase")
public class SqlServerDataBaseConfig {
/**
* dao层的包路径
*/
static final String PACKAGE = "com.hnks.springboot_list.mapper.sqlser";
/**
* mapper文件的相对路径
*/
private static final String MAPPER_LOCATION = "classpath:mapper/sqlser/*.xml";
private String filters;
private String url;
private String username;
private String password;
private String driverClassName;
private int initialSize;
private int minIdle;
private int maxActive;
private long maxWait;
private long timeBetweenEvictionRunsMillis;
private long minEvictableIdleTimeMillis;
private String validationQuery;
private boolean testWhileIdle;
private boolean testOnBorrow;
private boolean testOnReturn;
private boolean poolPreparedStatements;
private int maxPoolPreparedStatementPerConnectionSize;
@Bean(name = "sqlBaseConfig")
public DataSource sqlBaseConfig() throws SQLException {
DruidDataSource druid = new DruidDataSource();
// 监控统计拦截的filters
druid.setFilters(filters);
// 配置基本属性
druid.setDriverClassName(driverClassName);
druid.setUsername(username);
druid.setPassword(password);
druid.setUrl(url);
//初始化时建立物理连接的个数
druid.setInitialSize(initialSize);
//最大连接池数量
druid.setMaxActive(maxActive);
//最小连接池数量
druid.setMinIdle(minIdle);
//获取连接时最大等待时间,单位毫秒。
druid.setMaxWait(maxWait);
//间隔多久进行一次检测,检测需要关闭的空闲连接
druid.setTimeBetweenEvictionRunsMillis(timeBetweenEvictionRunsMillis);
//一个连接在池中最小生存的时间
druid.setMinEvictableIdleTimeMillis(minEvictableIdleTimeMillis);
//用来检测连接是否有效的sql
druid.setValidationQuery(validationQuery);
//建议配置为true,不影响性能,并且保证安全性。
druid.setTestWhileIdle(testWhileIdle);
//申请连接时执行validationQuery检测连接是否有效
druid.setTestOnBorrow(testOnBorrow);
druid.setTestOnReturn(testOnReturn);
//是否缓存preparedStatement,也就是PSCache,oracle设为true,mysql设为false。分库分表较多推荐设置为false
druid.setPoolPreparedStatements(poolPreparedStatements);
// 打开PSCache时,指定每个连接上PSCache的大小
druid.setMaxPoolPreparedStatementPerConnectionSize(maxPoolPreparedStatementPerConnectionSize);
return druid;
}
@Bean(name = "backManager")
public DataSourceTransactionManager backManager() throws SQLException {
return new DataSourceTransactionManager(sqlBaseConfig());
}
@Bean(name = "sqlServerDataBase")
public SqlSessionFactory sqlServerDataBaseConfig(@Qualifier("sqlBaseConfig") DataSource backDataSource) throws Exception {
final MybatisSqlSessionFactoryBean sessionFactory = new MybatisSqlSessionFactoryBean();
GlobalConfig globalConfig=new GlobalConfig();
globalConfig.setMetaObjectHandler(new MyMetaObjectHandler());//生成实体并放入globalConfig
sessionFactory.setDataSource(backDataSource);
sessionFactory.setGlobalConfig(globalConfig);//配置自动添加时间加在配置
sessionFactory.setMapperLocations(new PathMatchingResourcePatternResolver()
.getResources(SqlServerDataBaseConfig.MAPPER_LOCATION));
return sessionFactory.getObject();
}
}
需要配置
GlobalConfig globalConfig=new GlobalConfig(); globalConfig.setMetaObjectHandler(new MyMetaObjectHandler());//生成实体并放入globalConfigsessionFactory.setGlobalConfig(globalConfig);//配置自动添加时间加在配置
配置类
@Slf4j
@Component
public class MyMetaObjectHandler implements MetaObjectHandler {
//插入时策略
@Override
public void insertFill(MetaObject metaObject) {
log.info("start insert fill ....");
this.setFieldValByName("gmtCreate", new Date(),metaObject);
this.setFieldValByName("gmtModified", new Date(),metaObject);
}
//更新策略
@Override
public void updateFill(MetaObject metaObject) {
log.info("start update fill ....");
this.setFieldValByName("gmtModified", new Date(),metaObject);
}
}