首页
学习
活动
专区
圈层
工具
发布
30 篇文章
1
Spring Boot2 系列教程(二)创建 Spring Boot 项目的三种方式
2
Spring Boot2 系列教程(三)理解 spring-boot-starter-parent
3
Spring Boot2 系列教程(五)Spring Boot中的 yaml 配置
4
Spring Boot2 系列教程(六)自定义 Spring Boot 中的 starter
5
Spring Boot2 系列教程(七)理解自动化配置的原理
6
Spring Boot2 系列教程(八)Spring Boot 中配置 Https
7
Spring Boot2 系列教程(九)Spring Boot 整合 Thymeleaf
8
Spring Boot2 系列教程(十九)Spring Boot 整合 JdbcTemplate
9
Spring Boot2 系列教程(十八)Spring Boot 中自定义 SpringMVC 配置
10
Spring Boot2 系列教程(十七)SpringBoot 整合 Swagger2
11
Spring Boot2 系列教程(十六)定时任务的两种实现方式
12
Spring Boot2 系列教程(十五)定义系统启动任务的两种方式
13
Spring Boot2 系列教程(十三)Spring Boot 中的全局异常处理
14
Spring Boot2 系列教程(十一)Spring Boot 中的静态资源配置
15
Spring Boot2 系列教程(十二)@ControllerAdvice 的三种使用场景
16
Spring Boot2 系列教程(十四)CORS 解决跨域问题
17
Spring Boot2 系列教程(十)Spring Boot 整合 Freemarker
18
Spring Boot2 系列教程(二十八)Spring Boot 整合 Session 共享
19
Spring Boot2 系列教程(二十九)Spring Boot 整合 Redis
20
Spring Boot2 系列教程(二十七)Nginx 极简扫盲入门
21
Spring Boot2 系列教程(二十六)Spring Boot 整合 Redis
22
Spring Boot2 系列教程(二十二)整合 MyBatis 多数据源
23
Spring Boot2 系列教程(二十一)整合 MyBatis
24
Spring Boot2 系列教程(二十)Spring Boot 整合JdbcTemplate 多数据源
25
Spring Boot2 系列教程(三十七)Spring Security 整合 JWT
26
Spring Boot2 系列教程(三十六)SpringSecurity 中角色继承的坑
27
Spring Boot2 系列教程(三十五)SpringSecurity 使用 JSON 格式登录
28
Spring Boot2 系列教程(三十四)Spring Security 添加验证码
29
Spring Boot2 系列教程(三十三)整合 Spring Security
30
Spring Boot2 系列教程(三十一)Spring Boot 构建 RESTful 风格应用

Spring Boot2 系列教程(二十二)整合 MyBatis 多数据源

关于多数据源的配置,前面和大伙介绍过 JdbcTemplate 多数据源配置,那个比较简单,本文来和大伙说说 MyBatis 多数据源的配置。

其实关于多数据源,我的态度还是和之前一样,复杂的就直接上分布式数据库中间件,简单的再考虑多数据源。这是项目中的建议,技术上的话,当然还是各种技术都要掌握的。

工程创建

首先需要创建 MyBatis 项目,项目创建和前文的一样,添加 MyBatis、 MySQL 以及 Web 依赖:

项目创建完成后,添加 Druid 依赖,和 JdbcTemplate 一样,这里添加 Druid 依赖也必须是专为 Spring Boot 打造的 Druid,不能使用传统的 Druid。完整的依赖如下:

代码语言:javascript
复制
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
    <groupId>org.mybatis.spring.boot</groupId>
    <artifactId>mybatis-spring-boot-starter</artifactId>
    <version>2.0.0</version>
</dependency>
<dependency>
    <groupId>com.alibaba</groupId>
    <artifactId>druid-spring-boot-starter</artifactId>
    <version>1.1.10</version>
</dependency>
<dependency>
    <groupId>mysql</groupId>
    <artifactId>mysql-connector-java</artifactId>
    <version>5.1.28</version>
    <scope>runtime</scope>
</dependency>

多数据源配置

接下来配置多数据源,这里基本上还是和 JdbcTemplate 多数据源的配置方式一致,首先在 application.properties 中配置数据库基本信息,然后提供两个 DataSource 即可,这里我再把代码贴出来,里边的道理条条框框的,大伙可以参考前面的文章,这里不再赘述。

application.properties 中的配置:

代码语言:javascript
复制
spring.datasource.one.url=jdbc:mysql:///test01?useUnicode=true&characterEncoding=utf-8
spring.datasource.one.username=root
spring.datasource.one.password=root
spring.datasource.one.type=com.alibaba.druid.pool.DruidDataSource

spring.datasource.two.url=jdbc:mysql:///test02?useUnicode=true&characterEncoding=utf-8
spring.datasource.two.username=root
spring.datasource.two.password=root
spring.datasource.two.type=com.alibaba.druid.pool.DruidDataSource

然后再提供两个 DataSource,如下:

代码语言:javascript
复制
@Configuration
public class DataSourceConfig {
    @Bean
    @ConfigurationProperties(prefix = "spring.datasource.one")
    DataSource dsOne() {
        return DruidDataSourceBuilder.create().build();
    }
    @Bean
    @ConfigurationProperties(prefix = "spring.datasource.two")
    DataSource dsTwo() {
        return DruidDataSourceBuilder.create().build();
    }
}

MyBatis 配置

接下来则是 MyBatis 的配置,不同于 JdbcTemplate,MyBatis 的配置要稍微麻烦一些,因为要提供两个 Bean,因此这里两个数据源我将在两个类中分开来配置,首先来看第一个数据源的配置:

代码语言:javascript
复制
@Configuration
@MapperScan(basePackages = "org.javaboy.mybatis.mapper1",sqlSessionFactoryRef = "sqlSessionFactory1",sqlSessionTemplateRef = "sqlSessionTemplate1")
public class MyBatisConfigOne {
    @Resource(name = "dsOne")
    DataSource dsOne;

    @Bean
    SqlSessionFactory sqlSessionFactory1() {
        SqlSessionFactory sessionFactory = null;
        try {
            SqlSessionFactoryBean bean = new SqlSessionFactoryBean();
            bean.setDataSource(dsOne);
            sessionFactory = bean.getObject();
        } catch (Exception e) {
            e.printStackTrace();
        }
        return sessionFactory;
    }
    @Bean
    SqlSessionTemplate sqlSessionTemplate1() {
        return new SqlSessionTemplate(sqlSessionFactory1());
    }
}

创建 MyBatisConfigOne 类,首先指明该类是一个配置类,配置类中要扫描的包是 org.javaboy.mybatis.mapper1 ,即该包下的 Mapper 接口将操作 dsOne 中的数据,对应的 SqlSessionFactory 和 SqlSessionTemplate 分别是 sqlSessionFactory1 和 sqlSessionTemplate1,在 MyBatisConfigOne 内部,分别提供 SqlSessionFactory 和 SqlSessionTemplate 即可, SqlSessionFactory 根据 dsOne 创建,然后再根据创建好的SqlSessionFactory 创建一个 SqlSessionTemplate。

这里配置完成后,依据这个配置,再来配置第二个数据源即可:

代码语言:javascript
复制
@Configuration
@MapperScan(basePackages = "org.javaboy.mybatis.mapper2",sqlSessionFactoryRef = "sqlSessionFactory2",sqlSessionTemplateRef = "sqlSessionTemplate2")
public class MyBatisConfigTwo {
    @Resource(name = "dsTwo")
    DataSource dsTwo;

    @Bean
    SqlSessionFactory sqlSessionFactory2() {
        SqlSessionFactory sessionFactory = null;
        try {
            SqlSessionFactoryBean bean = new SqlSessionFactoryBean();
            bean.setDataSource(dsTwo);
            sessionFactory = bean.getObject();
        } catch (Exception e) {
            e.printStackTrace();
        }
        return sessionFactory;
    }
    @Bean
    SqlSessionTemplate sqlSessionTemplate2() {
        return new SqlSessionTemplate(sqlSessionFactory2());
    }
}

好了,这样 MyBatis 多数据源基本上就配置好了,接下来只需要在 org.javaboy.mybatis.mapper1 和 org.javaboy.mybatis.mapper2 包中提供不同的 Mapper,Service 中注入不同的 Mapper 就可以操作不同的数据源。

mapper 创建

org.javaboy.mybatis.mapper1 中的 mapper:

代码语言:javascript
复制
public interface UserMapperOne {
    List<User> getAllUser();
}

对应的 XML 文件:

代码语言:javascript
复制
<?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.javaboy.mybatis.mapper1.UserMapperOne">
    <select id="getAllUser" resultType="org.javaboy.mybatis.model.User">
        select * from t_user;
    </select>
</mapper>

org.javaboy.mybatis.mapper2 中的 mapper:

代码语言:javascript
复制
public interface UserMapper {
    List<User> getAllUser();
}

对应的 XML 文件:

代码语言:javascript
复制
<?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.javaboy.mybatis.mapper2.UserMapper">
    <select id="getAllUser" resultType="org.javaboy.mybatis.model.User">
        select * from t_user;
    </select>
</mapper>

接下来,在 Service 中注入两个不同的 Mapper,不同的 Mapper 将操作不同的数据源。

好了,关于 MyBatis 多数据源本文就先说到这里。

下一篇
举报
领券