【springboot】springboot+mybatisplus多數據源配置,以及多數據源下使用mybatis-plus的自帶的crud出現Invalid bind的問題

1.引入相關的依賴 驅動和連接池等等,下面只是mybatis-plus相關依賴

        <dependency>
            <groupId>com.baomidou</groupId>
            <artifactId>mybatis-plus-boot-starter</artifactId>
            <version>3.0.7.1</version>
            <exclusions>
                <exclusion>
                    <groupId>com.baomidou</groupId>
                    <artifactId>mybatis-plus-generator</artifactId>
                </exclusion>
            </exclusions>
        </dependency>
        <dependency>
            <groupId>com.baomidou</groupId>
            <artifactId>mybatis-plus</artifactId>
            <version>3.0.7.1</version>
        </dependency>

2.在application.yml文件配置如下:注意jdbc-url,單個數據元是url

spring:
  datasource:
    app1:
      type: com.alibaba.druid.pool.DruidDataSource
      driver-class-name: oracle.jdbc.OracleDriver
      jdbc-url: jdbc:oracle:thin:@192.168.126.129:1521:app
      username: app1
      password: 123456
    app2:
      type: com.alibaba.druid.pool.DruidDataSource
      driver-class-name: oracle.jdbc.OracleDriver
      jdbc-url: jdbc:oracle:thin:@192.168.126.129:1521:app
      username: app2
      password: 123456

3.新建兩個配置類分別對應兩個數據元

(這裏用原生的sqlSessionFactoy的話,使用mybatis-plus自帶的save,insert等等會出現Invalid bound statement(not found)的問題,所以得換成 MybatisSqlSessionFactoryBean,這樣就可以使用basemapper中的基礎crud了  )

package com.al.config;

import com.baomidou.mybatisplus.extension.spring.MybatisSqlSessionFactoryBean;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.session.SqlSessionFactory;
import org.mybatis.spring.SqlSessionFactoryBean;
import org.mybatis.spring.SqlSessionTemplate;
import org.mybatis.spring.annotation.MapperScan;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.boot.jdbc.DataSourceBuilder;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.Primary;
import org.springframework.core.io.support.PathMatchingResourcePatternResolver;

import javax.sql.DataSource;

@Configuration
@MapperScan(basePackages = {"com.al.dao.app1"},//mapper接口的包位置
        annotationClass= Mapper.class,
        sqlSessionFactoryRef = "sqlSessionFactoryApp1")
public class DBApp1Config {

    @Bean(name = "dataSourceApp1")
    @Primary
    @ConfigurationProperties(prefix = "spring.datasource.app1")
    public DataSource dataSourceAppPlatformSystem(){
        return DataSourceBuilder.create().build();
    }

    @Bean(name = "sqlSessionFactoryApp1")
    @Primary
    public SqlSessionFactory sqlSessionFactoryApp1(@Qualifier("dataSourceApp1") DataSource dataSource) throws Exception {

        MybatisSqlSessionFactoryBean factoryBean = new MybatisSqlSessionFactoryBean();
        factoryBean.setDataSource(dataSource);
        factoryBean.setMapperLocations(new PathMatchingResourcePatternResolver().getResources("classpath*:/mapper/app1/*.xml")
        );
        return factoryBean.getObject();
    }

    @Bean(name = "sqlSessionTemplateApp1")
    @Primary
    public SqlSessionTemplate sqlSessionTemplateApp1(@Qualifier("sqlSessionFactoryApp1") SqlSessionFactory sessionFactory){
        return new SqlSessionTemplate(sessionFactory);
    }

}
package com.al.config;

import com.baomidou.mybatisplus.extension.spring.MybatisSqlSessionFactoryBean;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.session.SqlSessionFactory;
import org.mybatis.spring.SqlSessionFactoryBean;
import org.mybatis.spring.SqlSessionTemplate;
import org.mybatis.spring.annotation.MapperScan;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.boot.jdbc.DataSourceBuilder;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.Primary;
import org.springframework.core.io.support.PathMatchingResourcePatternResolver;

import javax.sql.DataSource;

@Configuration
@MapperScan(basePackages = {"com.al.dao.app2"},//mapper接口的包位置
        annotationClass= Mapper.class,
        sqlSessionFactoryRef = "sqlSessionFactoryApp2")
public class DBApp2Config {

    @Bean(name = "dataSourceApp2")
    @Primary
    @ConfigurationProperties(prefix = "spring.datasource.app2")
    public DataSource dataSourceAppPlatformSystem(){
        return DataSourceBuilder.create().build();
    }

    @Bean(name = "sqlSessionFactoryApp2")
    @Primary
    public SqlSessionFactory sqlSessionFactoryApp2(@Qualifier("dataSourceApp2") DataSource dataSource) throws Exception {

        MybatisSqlSessionFactoryBean factoryBean = new MybatisSqlSessionFactoryBean();
        factoryBean.setDataSource(dataSource);
        factoryBean.setMapperLocations(new PathMatchingResourcePatternResolver().getResources("classpath*:/mapper/app2/*.xml")
        );
        return factoryBean.getObject();
    }

    @Bean(name = "sqlSessionTemplateApp2")
    @Primary
    public SqlSessionTemplate sqlSessionTemplateApp2(@Qualifier("sqlSessionFactoryApp2") SqlSessionFactory sessionFactory){
        return new SqlSessionTemplate(sessionFactory);
    }

}

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章