主要是配置两个大类:SqlSessionFactory和MapperFactoryBean,还有yaml文件
1.SqlSessionFactory
package com.demo.dhr.attendance.config;
import org.apache.ibatis.session.SqlSessionFactory;
import org.mybatis.spring.SqlSessionFactoryBean;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.boot.jdbc.DataSourceBuilder;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.Primary;
import org.springframework.core.io.support.PathMatchingResourcePatternResolver;
import org.springframework.core.io.support.ResourcePatternResolver;
import org.springframework.jdbc.core.JdbcTemplate;
import javax.sql.DataSource;
/**
* <p> Title: jwt验证Provider</p>
* <p> Description: NMyBatis基础配置 创建了一个SqlSessionFactory和一个SqlSessionTemplate,为了支持注解事务,
* 增加了@EnableTransactionManagement注解,并且反回了一个PlatformTransactionManagerBean </p>
*
*/
@Configuration
@ComponentScan
public class MybatisConfig /**implements TransactionManagementConfigurer*/ {
//主数据源,大数据
@Bean(name="primaryDataSource")
@Primary
@ConfigurationProperties(prefix="spring.datasource.primary")
public DataSource workerDataSource() {
return DataSourceBuilder.create().build();
}
@Bean(name = "primarySqlSessionFactory")
@Primary
public SqlSessionFactory workerSqlSessionFactory() {
SqlSessionFactoryBean bean = new SqlSessionFactoryBean();
//该属性必须配置,多数据源时会有多个dataSource,同时也需要配置多个sqlSessionFactory来对应。
bean.setDataSource(workerDataSource());
//该属性可以给包中的类注册别名,注册后可以直接使用类名,而不用使用全限定的类名(就是不用包含包名)
bean.setTypeAliasesPackage("com.demo.test.test.entity");
// 添加XML目录
ResourcePatternResolver resolver = new PathMatchingResourcePatternResolver();
try {
//配置该属性后,sqlSessionFactory会自动扫描该路径下的所有文件并解析。
//该路径支持多个,可以用,;\t\n进行分割。
bean.setMapperLocations(resolver.getResources("classpath:com/demo/test/test/mapper/primary/*.xml"));
return bean.getObject();
} catch (Exception e) {
throw new RuntimeException(e);
}
}
@Bean(name="jdbcTemplate")
@Primary
public JdbcTemplate jdbcTemplate(){
return new JdbcTemplate(workerDataSource());
}
@Bean(name="whjbDataSource")
@ConfigurationProperties(prefix="spring.datasource.whjb")
public DataSource whjbDataSource() {
return DataSourceBuilder.create().build();
}
@Bean(name = "whjbSqlSessionFactory")
public SqlSessionFactory whjbSqlSessionFactory() {
SqlSessionFactoryBean bean = new SqlSessionFactoryBean();
//该属性必须配置,多数据源时会有多个dataSource,同时也需要配置多个sqlSessionFactory来对应。
bean.setDataSource(whjbDataSource());
//该属性可以给包中的类注册别名,注册后可以直接使用类名,而不用使用全限定的类名(就是不用包含包名)
bean.setTypeAliasesPackage("com.demo.test.test.entity");
// 添加XML目录
ResourcePatternResolver resolver = new PathMatchingResourcePatternResolver();
try {
//配置该属性后,sqlSessionFactory会自动扫描该路径下的所有文件并解析。
//该路径支持多个,可以用,;\t\n进行分割。
bean.setMapperLocations(resolver.getResources("classpath:com/demo/test/test/mapper/whjb/*.xml"));
return bean.getObject();
} catch (Exception e) {
throw new RuntimeException(e);
}
}
@Bean(name="whjbJdbcTemplate")
public JdbcTemplate whjbJdbcTemplate(){
return new JdbcTemplate(whjbDataSource());
}
@Bean(name="zjDataSource")
@ConfigurationProperties(prefix="spring.datasource.zj")
public DataSource zjDataSource() {
return DataSourceBuilder.create().build();
}
@Bean(name = "zjSqlSessionFactory")
public SqlSessionFactory zjSqlSessionFactory() {
SqlSessionFactoryBean bean = new SqlSessionFactoryBean();
//该属性必须配置,多数据源时会有多个dataSource,同时也需要配置多个sqlSessionFactory来对应。
bean.setDataSource(zjDataSource());
//该属性可以给包中的类注册别名,注册后可以直接使用类名,而不用使用全限定的类名(就是不用包含包名)
bean.setTypeAliasesPackage("com.demo.test.test.entity");
// 添加XML目录
ResourcePatternResolver resolver = new PathMatchingResourcePatternResolver();
try {
//配置该属性后,sqlSessionFactory会自动扫描该路径下的所有文件并解析。
//该路径支持多个,可以用,;\t\n进行分割。
bean.setMapperLocations(resolver.getResources("classpath:com/demo/test/test/mapper/zj/*.xml"));
return bean.getObject();
} catch (Exception e) {
throw new RuntimeException(e);
}
}
@Bean(name="zjJdbcTemplate")
public JdbcTemplate zjJdbcTemplate(){
return new JdbcTemplate(zjDataSource());
}
}
2.MapperFactoryBean
package com.demo.dhr.attendance.config;
import org.mybatis.spring.mapper.MapperScannerConfigurer;
import org.springframework.boot.autoconfigure.AutoConfigureAfter;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
/**
* 为了代替手工使用 SqlSessionDaoSupport 或 SqlSessionTemplate 编写数据访问对象 (DAO)的代码,
* MyBatis-Spring 提供了一个动态代理的实现:MapperFactoryBean。
* 这个类 可以让你直接注入数据映射器接口到你的 service 层 bean 中。
* 当使用映射器时,你仅仅如调 用你的 DAO 一样调用它们就可以了,
* 但是你不需要编写任何 DAO 实现的代码,因为 MyBatis-Spring 将会为你创建代理。
*/
@Configuration
@AutoConfigureAfter(MybatisConfig.class)
public class MyBatisMapperScannerConfig {
@Bean
public MapperScannerConfigurer mapperScannerConfigurer1() {
/*
* 一般用过的最多也就是这3个属性,实际情况下最常用的只有basePackage。
* 1,basePackage属性 可以写多个,可以用,;\t\n进行分割。
* 2,annotationClass 该属性实际上就是起到一个过滤的作用,如果设置了该属性,那么MyBatis的接口只有包含该注解,才会被扫描进去。
* 3,sqlSessionFactoryBeanName 这个属性一般都用不到,只有当你配置多数据源的时候,这是会有多个sqlSessionFactory,你就需要通过该属性来指定哪一个sqlSessionFactory
*/
MapperScannerConfigurer mapperScannerConfigurer = new MapperScannerConfigurer();
mapperScannerConfigurer.setSqlSessionFactoryBeanName("primarySqlSessionFactory");
mapperScannerConfigurer.setBasePackage("com.demo.test.test.mapper.primary");
return mapperScannerConfigurer;
}
@Bean
public MapperScannerConfigurer mapperScannerConfigurer7() {
MapperScannerConfigurer mapperScannerConfigurer = new MapperScannerConfigurer();
mapperScannerConfigurer.setSqlSessionFactoryBeanName("zjSqlSessionFactory");
mapperScannerConfigurer.setBasePackage("com.demo.test.test.mapper.zj");
return mapperScannerConfigurer;
}
@Bean
public MapperScannerConfigurer mapperScannerConfigurer8() {
MapperScannerConfigurer mapperScannerConfigurer = new MapperScannerConfigurer();
mapperScannerConfigurer.setSqlSessionFactoryBeanName("whjbSqlSessionFactory");
mapperScannerConfigurer.setBasePackage("com.demo.test.test.mapper.whjb");
return mapperScannerConfigurer;
}
}
3.yaml文件
# 本地环境配置
spring:
profiles: stage
# 数据库连接配置
datasource:
primary:
driver-class-name: com.mysql.jdbc.Driver
jdbc-url: jdbc:mysql://10.130.217.215:3306/dataBase?serverTimezone=GMT%2B8&zeroDateTimeBehavior=round&useSSL=false
username: root
password: root
zj:
driver-class-name: com.mysql.jdbc.Driver
jdbc-url: jdbc:mysql://10.130.217.215:3306/dataBase?serverTimezone=GMT%2B8&zeroDateTimeBehavior=round&useSSL=false
username: root
password: root
whjb:
driver-class-name: com.mysql.jdbc.Driver
jdbc-url: jdbc:mysql://10.153.66.131:3306/dataBase?serverTimezone=GMT%2B8&zeroDateTimeBehavior=round&useSSL=false
username: root
password: root