mybatisplus处理多数据源关键字兼容问题

1.版本依赖

<dependency>
            <groupId>com.baomidou</groupId>
            <artifactId>mybatis-plus-boot-starter</artifactId>
            <version>3.1.0</version>
</dependency>

2.背景

我们项目中需要兼容ORACLE和MYSQL数据库,客户可以在其中选择任意一个,非同时接多数据源,再引入MP之后,自动生成sql语句没有加关键字,对于mysql的usage等字段名不加着重符号就会报错,MP提供了一种解决方案:如下在提供的注解中将字段拼上`可以解决问题,但是对于我们系统,要同时兼容mysql和oracle,所以不能使用这种方式。

@TableField("`name`")
private String name;

3.临时方案

①重写sql注入器并注入

@Bean
    @ConditionalOnProperty(value = "jdbc.type", havingValue = "mysql")
    public DefaultSqlInjector defaultSqlInjector() {

        return new DefaultSqlInjector() {
            @Override
            public void inspectInject(final Mappe
  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
以下是使用MyBatisPlus实现多数据源的方法: 1. 配置多数据源: ```java @Configuration public class DataSourceConfig { @Bean @ConfigurationProperties(prefix = "spring.datasource.primary") public DataSource primaryDataSource() { return DataSourceBuilder.create().build(); } @Bean @ConfigurationProperties(prefix = "spring.datasource.secondary") public DataSource secondaryDataSource() { return DataSourceBuilder.create().build(); } @Bean @Primary public DataSource dynamicDataSource(DataSource primaryDataSource, DataSource secondaryDataSource) { DynamicDataSource dynamicDataSource = new DynamicDataSource(); Map<Object, Object> dataSourceMap = new HashMap<>(); dataSourceMap.put("primary", primaryDataSource); dataSourceMap.put("secondary", secondaryDataSource); dynamicDataSource.setTargetDataSources(dataSourceMap); dynamicDataSource.setDefaultTargetDataSource(primaryDataSource); return dynamicDataSource; } } ``` 2. 配置多数据源的Mapper扫描: ```java @Configuration @MapperScan(basePackages = {"com.example.primary.mapper"}, sqlSessionTemplateRef = "primarySqlSessionTemplate") public class PrimaryDataSourceConfig { @Bean public SqlSessionFactory primarySqlSessionFactory(@Qualifier("primaryDataSource") DataSource dataSource) throws Exception { SqlSessionFactoryBean bean = new SqlSessionFactoryBean(); bean.setDataSource(dataSource); return bean.getObject(); } @Bean public SqlSessionTemplate primarySqlSessionTemplate(@Qualifier("primarySqlSessionFactory") SqlSessionFactory sqlSessionFactory) { return new SqlSessionTemplate(sqlSessionFactory); } } @Configuration @MapperScan(basePackages = {"com.example.secondary.mapper"}, sqlSessionTemplateRef = "secondarySqlSessionTemplate") public class SecondaryDataSourceConfig { @Bean public SqlSessionFactory secondarySqlSessionFactory(@Qualifier("secondaryDataSource") DataSource dataSource) throws Exception { SqlSessionFactoryBean bean = new SqlSessionFactoryBean(); bean.setDataSource(dataSource); return bean.getObject(); } @Bean public SqlSessionTemplate secondarySqlSessionTemplate(@Qualifier("secondarySqlSessionFactory") SqlSessionFactory sqlSessionFactory) { return new SqlSessionTemplate(sqlSessionFactory); } } ``` 3. 配置多数据源的事务管理器: ```java @Configuration public class TransactionManagerConfig { @Bean @Primary public PlatformTransactionManager primaryTransactionManager(@Qualifier("dynamicDataSource") DataSource dataSource) { return new DataSourceTransactionManager(dataSource); } @Bean public PlatformTransactionManager secondaryTransactionManager(@Qualifier("secondaryDataSource") DataSource dataSource) { return new DataSourceTransactionManager(dataSource); } } ``` 4. 使用多数据源: ```java @Service public class UserService { @Autowired private UserMapper primaryUserMapper; @Autowired private UserMapper secondaryUserMapper; @Transactional(transactionManager = "primaryTransactionManager") public void addUser(User user) { primaryUserMapper.insert(user); } @Transactional(transactionManager = "secondaryTransactionManager") public void updateUser(User user) { secondaryUserMapper.updateById(user); } } ```

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值