springboot2.1.x整合mybatis多數據源

1.配置文件

spring.datasource.a.driver-class-name=com.mysql.cj.jdbc.Driver
spring.datasource.a.jdbc-url=jdbc:mysql://127.0.0.1:3306/test_a?serverTimezone=Asia/Shanghai&useUnicode=true&characterEncoding=utf-8&useSSL=false
spring.datasource.a.username=root
spring.datasource.a.password=root

spring.datasource.b.driver-class-name=com.mysql.cj.jdbc.Driver
spring.datasource.b.jdbc-url=jdbc:mysql://127.0.0.1:3306/test_b?serverTimezone=Asia/Shanghai&useUnicode=true&characterEncoding=utf-8&useSSL=true
spring.datasource.b.username=root
spring.datasource.b.password=root

2.數據源配置類

對應a數據源的配置類

import javax.sql.DataSource;

import org.apache.ibatis.session.SqlSessionFactory;
import org.mybatis.spring.SqlSessionFactoryBean;
import org.mybatis.spring.SqlSessionTemplate;
import org.mybatis.spring.annotation.MapperScan;
import org.mybatis.spring.boot.autoconfigure.SpringBootVFS;
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;

@Configuration
@MapperScan(basePackages = "com.xxx.test.mapper.a", sqlSessionFactoryRef = "testASqlSessionFactory")
public class DataSourceConfigA {

    //自動注入DataSource的屬性
	@Bean(name = "testADataSource")
	@ConfigurationProperties(prefix = "spring.datasource.a")
	public DataSource getDateSource() {
		return DataSourceBuilder.create().build();
	}

	@Bean(name = "testASqlSessionFactory")
	public SqlSessionFactory getSqlSessionFactory(@Qualifier("testADataSource") DataSource datasource)
			throws Exception {
		SqlSessionFactoryBean bean = new SqlSessionFactoryBean();
		bean.setDataSource(datasource);
        //設置model的全包名
		bean.setTypeAliasesPackage("com.xxx.test.model");
        //這個必須加,不然打包後配置的TypeAliasesPackage不起作用,如果xml中用到resultType="類名"會報錯找不到model中的類
		bean.setVfs(SpringBootVFS.class);
		return bean.getObject();
	}

	@Bean("testASqlSessionTemplate")
	public SqlSessionTemplate getSqlsessiontemplate(
			@Qualifier("testASqlSessionFactory") SqlSessionFactory sessionfactory) {
        //開啓從表的字段名到類的屬性名自動映射
		sessionfactory.getConfiguration().setMapUnderscoreToCamelCase(true);
		return new SqlSessionTemplate(sessionfactory);
	}

}

對應b數據源的配置類

import javax.sql.DataSource;

import org.apache.ibatis.session.SqlSessionFactory;
import org.mybatis.spring.SqlSessionFactoryBean;
import org.mybatis.spring.SqlSessionTemplate;
import org.mybatis.spring.annotation.MapperScan;
import org.mybatis.spring.boot.autoconfigure.SpringBootVFS;
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;

@Configuration
@MapperScan(basePackages = "com.xxx.test.mapper.b", sqlSessionFactoryRef = "testBSqlSessionFactory")
public class DataSourceConfigB {

	@Bean(name = "testADataSource")
	@ConfigurationProperties(prefix = "spring.datasource.b")
	public DataSource getDateSource() {
		return DataSourceBuilder.create().build();
	}

	@Bean(name = "testBSqlSessionFactory")
	public SqlSessionFactory getSqlSessionFactory(@Qualifier("testBDataSource") DataSource datasource)
			throws Exception {
		SqlSessionFactoryBean bean = new SqlSessionFactoryBean();
		bean.setDataSource(datasource);
		bean.setTypeAliasesPackage("com.xxx.test.model");
        //這個必須加,不然打包後配置的TypeAliasesPackage不起作用,如果xml中用到resultType="類名"會報錯找不到model中的類
		bean.setVfs(SpringBootVFS.class);
		return bean.getObject();
	}

	@Bean("testBSqlSessionTemplate")
	public SqlSessionTemplate getSqlsessiontemplate(
			@Qualifier("testBSqlSessionFactory") SqlSessionFactory sessionfactory) {
		sessionfactory.getConfiguration().setMapUnderscoreToCamelCase(true);
		return new SqlSessionTemplate(sessionfactory);
	}

}

3.項目包結構

/src/main/java

    com.xxx.test

        mapper

            a

                TestA.java

                TestA.xml

            b

                TestB.java

                TestB.xml

        model

            A.java

            B.java

4. 注意事項

//這個必須加,不然打包後配置的TypeAliasesPackage不起作用,如果xml中用到resultType="類名"會報錯找不到model中的類
bean.setVfs(SpringBootVFS.class);

 

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