目录
2、application-dev.properties多数据源配置
一、配置Druid多数据源
1、pom.xml引入依赖
说明:前三个依赖jar之前有被引入过,如果有引入则无需再追加。
<!-- MyBatis依赖:持久层框架,简化了持久层的开发 -->
<dependency>
<groupId>org.mybatis.spring.boot</groupId>
<artifactId>mybatis-spring-boot-starter</artifactId>
<version>2.0.0</version>
</dependency>
<!-- Druid数据源:连接池配置 -->
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>druid-spring-boot-starter</artifactId>
<version>1.1.22</version>
</dependency>
<!-- MySql驱动 -->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<scope>runtime</scope>
</dependency>
<!-- Oracle驱动 -->
<dependency>
<groupId>com.oracle</groupId>
<artifactId>ojdbc6</artifactId>
<version>11.2.0.1.0</version>
</dependency>
2、application-dev.properties多数据源配置
说明:① spring.datasource.druid.mysql.type中的mysql只是标识,也可以替换成one,同理oracle也是一样的意思。
② 配置都是在前面章节的基础上叠加的,不存在删除(如果有删除会说明的)
2-1、配置MySQL数据源
# ######################## MySQL数据源1基本配置,使用druid数据源 ########################
spring.datasource.druid.mysql.type=com.alibaba.druid.pool.DruidDataSource
spring.datasource.druid.mysql.url=jdbc:mysql://localhost:3306/database?useUnicode=true&characterEncoding=utf8&serverTimezone=Asia/Shanghai
spring.datasource.druid.mysql.driver-class-name=com.mysql.jdbc.Driver
spring.datasource.druid.mysql.username=root
spring.datasource.druid.mysql.password=123456
2-2、配置Oracle数据源
# ######################## Oracle数据源2基本配置,使用druid数据源 ########################
spring.datasource.druid.oracle.type=com.alibaba.druid.pool.DruidDataSource
spring.datasource.druid.oracle.url=jdbc:oracle:thin:@localhost:1521:ORCL
spring.datasource.druid.oracle.driver-class-name=oracle.jdbc.driver.OracleDriver
spring.datasource.druid.oracle.username=dev
spring.datasource.druid.oracle.password=dev
3、测试程序开发
① 代码配置了一个名为mysqlDataSource的数据源,对应application.properties中spring.datasource.druid.mysql前缀配置的数据库,然后创建了一个名为mysqlSqlSessionFactory的Bean,并且注入了mysqlDataSource。(同oracle)
② PACKAGE:MySQL数据库对应的mapper接口地址;MAPPER_LOCATION:对应的mapper xml文件路径。
③ @Primary:标志这个Bean如果在多个同类Bean候选时,该Bean优先被考虑。多数据源配置的时候,必须要有一个主数据源,用@Primary标志该Bean。
④ 因为使用了多数据源,所以原配置不能使用(如果不注释以下内容,启动会报错,因为配置中已经使用了数据源)
org.springboot.springboot01.mapper.StudentMapper 接口注释
org.springboot.springboot01.service.StudentService 接口注释部分方法
org.springboot.springboot01.service.impl.StudentServiceImpl 实现类注释部分方法
org.springboot.springboot01.controller.TestController注释调用StudentService 被注释的方法
3-1、新增org.springboot.springboot01.datasource包,在其下添加MysqlDatasourceConfig和OracleDatasourceConfig配置类
// MySQL数据源配置类
@Configuration
@MapperScan(basePackages = MysqlDatasourceConfig.PACKAGE, sqlSessionFactoryRef = "mysqlSqlSessionFactory")
public class MysqlDatasourceConfig {
// mysqldao扫描路径(无此包名,则新增)
static final String PACKAGE = "org.springboot.springboot01.mysqldao";
// mybatis mapper扫描路径(无此包名,则新增)
private static final String MAPPER_LOCATION = "classpath:mapper/mysql/*.xml";
@Primary
@Bean(name = "mysqlDataSource")
@ConfigurationProperties("spring.datasource.druid.mysql")
public DataSource mysqlDataSource() {
return DruidDataSourceBuilder.create().build();
}
@Primary
@Bean(name = "mysqlTransactionManager")
public DataSourceTransactionManager mysqlTransactionManager() {
return new DataSourceTransactionManager(mysqlDataSource());
}
@Primary
@Bean(name = "mysqlSqlSessionFactory")
public SqlSessionFactory mysqlSqlSessionFactory(@Qualifier("mysqlDataSource") DataSource dataSource) throws Exception {
final SqlSessionFactoryBean sessionFactory = new SqlSessionFactoryBean();
sessionFactory.setDataSource(dataSource);
// 如果不使用xml的方式配置mapper,则可以省去下面这行mapper location的配置。
sessionFactory.setMapperLocations(new PathMatchingResourcePatternResolver().getResources(MysqlDatasourceConfig.MAPPER_LOCATION));
return sessionFactory.getObject();
}
}
// Oracle数据源配置
@Configuration
@MapperScan(basePackages = OracleDatasourceConfig.PACKAGE, sqlSessionFactoryRef = "oracleSqlSessionFactory")
public class OracleDatasourceConfig {
// mysqldao扫描路径(无此包名,则新增)
static final String PACKAGE = "org.springboot.springboot01.oracledao";
// mybatis mapper扫描路径(无此包名,则新增)
private static final String MAPPER_LOCATION = "classpath:mapper/oracle/*.xml";
@Bean(name = "oracleDataSource")
@ConfigurationProperties("spring.datasource.druid.oracle")
public DataSource oracleDataSource() {
return DruidDataSourceBuilder.create().build();
}
@Bean(name = "oracleTransactionManager")
public DataSourceTransactionManager oracleTransactionManager() {
return new DataSourceTransactionManager(oracleDataSource());
}
@Bean(name = "oracleSqlSessionFactory")
public SqlSessionFactory oracleSqlSessionFactory(@Qualifier("oracleDataSource") DataSource dataSource) throws Exception {
final SqlSessionFactoryBean sessionFactory = new SqlSessionFactoryBean();
sessionFactory.setDataSource(dataSource);
// 如果不使用xml的方式配置mapper,则可以省去下面这行mapper location的配置。
sessionFactory.setMapperLocations(new PathMatchingResourcePatternResolver().getResources(OracleDatasourceConfig.MAPPER_LOCATION));
return sessionFactory.getObject();
}
}
3-2、新增org.springboot.springboot01.mysqldao和org.springboot.springboot01.oracledao包,并其路径下添加MysqlStudentMapper和OracleStudentMapper接口
// mysql操作数据库表接口(@Mapper可以去掉,因为在配置的时候就有扫描到它了)
@Mapper
public interface MysqlStudentMapper {
/**
* 获取所有学生信息
* @return List<Map<String, Object>>
*/
List<Map<String, Object>> getAllStudents();
/**
* 获取所有学生信息
* @return List<Student>
*/
List<Student> listAllStudent();
}
// oracle操作数据库表接口(@Mapper可以去掉,因为在配置的时候就有扫描到它了)
@Mapper
public interface OracleStudentMapper {
/**
* 获取所有学生信息
* @return List<Map<String, Object>>
*/
List<Map<String, Object>> getAllStudents();
/**
* 获取所有学生信息
* @return List<Student>
*/
List<Student> listAllStudent();
}
3-3、创建mapper接口对应的实现
<!-- 1. 在src/main/resource/mapper/mysql/路径下创建MysqlStudentMapper.xml -->
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="org.springboot.springboot01.mysqldao.MysqlStudentMapper">
<resultMap id="BaseResultMap" type="org.springboot.springboot01.bean.Student">
<id column="ID" jdbcType="DECIMAL" property="id" />
<result column="NAME" jdbcType="VARCHAR" property="name" />
<result column="SEX" jdbcType="VARCHAR" property="sex" />
</resultMap>
<select id="getAllStudents" resultType="java.util.Map">
select * from student
</select>
<select id="listAllStudent" resultMap="BaseResultMap">
select id, name from student
</select>
</mapper>
<!-- 2. 在src/main/resource/mapper/oracle/路径下创建OracleStudentMapper.xml -->
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="org.springboot.springboot01.oracledao.OracleStudentMapper">
<resultMap id="BaseResultMap" type="org.springboot.springboot01.bean.Student">
<id column="ID" jdbcType="DECIMAL" property="id" />
<result column="NAME" jdbcType="VARCHAR" property="name" />
<result column="SEX" jdbcType="VARCHAR" property="sex" />
</resultMap>
<select id="getAllStudents" resultType="java.util.Map">
select * from student
</select>
<select id="listAllStudent" resultMap="BaseResultMap">
select id, name from student
</select>
</mapper>
4、测试接口
// 1. 在org.springboot.springboot01.service.StudentService接口类中,加入方法
List<Map<String, Object>> getAllStudentsFromOracle();
List<Student> listAllStudentFromOracle();
List<Map<String, Object>> getAllStudentsFromMysql();
List<Student> listAllStudentFromMysql();
// 2. 在org.springboot.springboot01.service.impl.StudentServiceImpl类中,实现接口方法
@Resource
private MysqlStudentMapper mysqlStudentMapper;
@Resource
private OracleStudentMapper oracleStudentMapper;
@Override
public List<Map<String, Object>> getAllStudentsFromOracle() {
return oracleStudentMapper.getAllStudents();
}
@Override
public List<Student> listAllStudentFromOracle() {
return oracleStudentMapper.listAllStudent();
}
@Override
public List<Map<String, Object>> getAllStudentsFromMysql() {
return mysqlStudentMapper.getAllStudents();
}
@Override
public List<Student> listAllStudentFromMysql() {
return mysqlStudentMapper.listAllStudent();
}
// 3. 新增org.springboot.springboot01.controller.StudentController接口类,并提供对外方法
@RestController
public class StudentController {
@Resource
private StudentService studentService;
@RequestMapping("/getAllStudentsFromOracle")
public List<Map<String, Object>> getAllStudentsFromOracle() {
return studentService.getAllStudentsFromOracle();
}
@RequestMapping("/listAllStudentFromOracle")
public List<Student> listAllStudentFromOracle() {
return studentService.listAllStudentFromOracle();
}
@RequestMapping("/getAllStudentsFromMysql")
public List<Map<String, Object>> getAllStudentsFromMysql() {
return studentService.getAllStudentsFromMysql();
}
@RequestMapping("/listAllStudentFromMysql")
public List<Student> listAllStudentFromMysql() {
return studentService.listAllStudentFromMysql();
}
}
5、显示测试结果
5-1、项目目录
5-2、开始测试
① 测试地址:http://127.0.0.1:8080/springboot/getAllStudentsFromOracle
② 测试地址:http://127.0.0.1:8080/springboot/listAllStudentFromMysql