详解springboot+mybatis多数据源最简解决方案

本文将详细讲解如何在Spring Boot项目中使用Mybatis多数据源,完整的攻略包括以下几个步骤:

  1. 添加项目依赖
  2. 创建数据源配置类
  3. 创建Mybatis配置类
  4. 创建Mapper接口和Mapper.xml文件
  5. 测试访问多数据源

下面,我们将逐一进行讲解。

1. 添加项目依赖

pom.xml 文件中添加以下依赖:

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-jdbc</artifactId>
</dependency>
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-data-jpa</artifactId>
</dependency>
<dependency>
  <groupId>org.mybatis.spring.boot</groupId>
  <artifactId>mybatis-spring-boot-starter</artifactId>
  <version>2.1.4</version>
</dependency>

其中,spring-boot-starter-jdbcspring-boot-starter-data-jpa 用于创建基于JPA的单一数据源,mybatis-spring-boot-starter 是Mybatis官方提供的Spring Boot集成包。

如果需要使用多个数据源,还需要添加 druid 数据源和 mysql-connector-java 依赖:

<dependency>
  <groupId>com.alibaba</groupId>
  <artifactId>druid-spring-boot-starter</artifactId>
  <version>1.2.6</version>
</dependency>
<dependency>
  <groupId>mysql</groupId>
  <artifactId>mysql-connector-java</artifactId>
  <version>8.0.25</version>
</dependency>

druid-spring-boot-starter 是Druid数据源的Spring Boot集成包。

2. 创建数据源配置类

src/main/java 目录下创建一个名为 datasource 的包,然后在此包下创建 FirstDataSourceConfigSecondDataSourceConfig 两个类,分别用于配置第一个和第二个数据源。

@Configuration
@MapperScan(basePackages = "com.example.mapper.first", sqlSessionFactoryRef = "firstSqlSessionFactory")
@EnableTransactionManagement
public class FirstDataSourceConfig {

  @Bean(name = "firstDataSource")
  @ConfigurationProperties(prefix = "spring.datasource.first")
  @Primary
  public DataSource firstDataSource() {
    return DruidDataSourceBuilder.create().build();
  }

  @Bean(name = "firstSqlSessionFactory")
  @Primary
  public SqlSessionFactory firstSqlSessionFactory(@Qualifier("firstDataSource") DataSource dataSource) throws Exception {
    SqlSessionFactoryBean bean = new SqlSessionFactoryBean();
    bean.setDataSource(dataSource);
    // 设置mybatis配置文件
    bean.setMapperLocations(new PathMatchingResourcePatternResolver().getResources("classpath*:mapper/first/*.xml"));
    bean.setConfigLocation(new ClassPathResource("mybatis/mybatis-config.xml"));
    return bean.getObject();
  }

  @Bean(name = "firstTransactionManager")
  @Primary
  public DataSourceTransactionManager firstTransactionManager(@Qualifier("firstDataSource") DataSource dataSource) {
    return new DataSourceTransactionManager(dataSource);
  }

  @Bean(name = "firstSqlSessionTemplate")
  @Primary
  public SqlSessionTemplate firstSqlSessionTemplate(@Qualifier("firstSqlSessionFactory") SqlSessionFactory sqlSessionFactory) {
    return new SqlSessionTemplate(sqlSessionFactory);
  }
}
@Configuration
@MapperScan(basePackages = "com.example.mapper.second", sqlSessionFactoryRef = "secondSqlSessionFactory")
@EnableTransactionManagement
public class SecondDataSourceConfig {

  @Bean(name = "secondDataSource")
  @ConfigurationProperties(prefix = "spring.datasource.second")
  public DataSource secondDataSource() {
    return DruidDataSourceBuilder.create().build();
  }

  @Bean(name = "secondSqlSessionFactory")
  public SqlSessionFactory secondSqlSessionFactory(@Qualifier("secondDataSource") DataSource dataSource) throws Exception {
    SqlSessionFactoryBean bean = new SqlSessionFactoryBean();
    bean.setDataSource(dataSource);
    // 设置mybatis配置文件
    bean.setMapperLocations(new PathMatchingResourcePatternResolver().getResources("classpath*:mapper/second/*.xml"));
    bean.setConfigLocation(new ClassPathResource("mybatis/mybatis-config.xml"));
    return bean.getObject();
  }

  @Bean(name = "secondTransactionManager")
  public DataSourceTransactionManager secondTransactionManager(@Qualifier("secondDataSource") DataSource dataSource) {
    return new DataSourceTransactionManager(dataSource);
  }

  @Bean(name = "secondSqlSessionTemplate")
  public SqlSessionTemplate secondSqlSessionTemplate(@Qualifier("secondSqlSessionFactory") SqlSessionFactory sqlSessionFactory) {
    return new SqlSessionTemplate(sqlSessionFactory);
  }
}

这两个类都需要使用 @Configuration 注解来声明,该注解表明这是一个Spring配置类。

其中,FirstDataSourceConfigSecondDataSourceConfig 类都有三个核心方法:

  1. xxxDataSource:用于创建数据源(@Bean 注解表示方法返回值是一个Bean);
  2. xxxSqlSessionFactory:用于创建SqlSessionFactory(通过 @Qualifier 指定数据源Bean);
  3. xxxTransactionManager 和 xxxSqlSessionTemplate:用于配置事务管理器和SqlSessionTemplate。

配置类中的 @MapperScan 注解用于扫描 com.example.mapper.firstcom.example.mapper.second 包下的Mapper接口,sqlSessionFactoryRef 参数指定使用的SqlSessionFactory。

3. 创建Mybatis配置类

src/main/java 目录下创建 MybatisConfig 类,用于配置Mybatis相关的配置。

@Configuration
public class MybatisConfig {

  @Bean
  public ConfigurationCustomizer configurationCustomizer() {
    return (Configuration configuration) -> {
      // 开启驼峰命名规则
      configuration.setMapUnderscoreToCamelCase(true);
      // 显示sql语句
      configuration.setLogImpl(StdOutImpl.class);
    };
  }
}

该类使用了 @Configuration 注解,表示它是一个Spring配置类,在此类中定义了一个 ConfigurationCustomizer ,以开启Mybatis的驼峰命名和显示SQL语句的功能。使用 @Bean 来声明这个 ConfigurationCustomizer Bean。

4. 创建Mapper接口和Mapper.xml文件

com.example.mapper.firstcom.example.mapper.second 包下分别创建两个Mapper接口和对应的Mapper.xml文件。

FirstMapper 为例:

FirstMapper.java

public interface FirstMapper {

  List<First> listAll();

}

FirstMapper.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="com.example.mapper.first.FirstMapper">

  <resultMap id="first" type="com.example.entity.first.First">
    <id property="id" column="id"/>
    <result property="name" column="name"/>
    <result property="age" column="age"/>
  </resultMap>

  <select id="listAll" resultMap="first">
    select * from first
  </select>

</mapper>

其中,namespace 用于指定这个Mapper接口的全限定名。

FirstMapper.xml 文件中包含了两个部分:

  1. resultMap:用于将查询结果映射到Java对象。
  2. select:用于配置具体的SQL查询,以及使用的resultMap。

5. 测试访问多数据源

在Spring Boot应用中可以使用 @Autowired 来注入不同的数据源对象。

FirstController 为例:

@RestController
@RequestMapping("/first")
public class FirstController {

  @Autowired
  private FirstMapper firstMapper;

  @GetMapping("/listAll")
  public List<First> listAll() {
    return firstMapper.listAll();
  }
}

在此演示中,我们使用@RestController注解声明一个控制器,并使用@Autowired注解来注入FirstMapper对象。

同样的,我们也可以创建一个 SecondController 来访问第二个数据源。

至此,我们已经完成了Spring Boot + Mybatis多数据源的配置,同时也完成了测试。

附上完整代码的Github地址:https://github.com/X-TJ/springboot-mybatis-multi-datasource

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:详解springboot+mybatis多数据源最简解决方案 - Python技术站

(0)
上一篇 2023年5月20日
下一篇 2023年5月20日

相关文章

  • 在已经使用mybatis的项目里引入mybatis-plus,结果不能共存的解决

    在已经使用MyBatis框架的项目中引入MyBatis-Plus,同样需要引入相应的依赖。同时,需要注意,MyBatis-Plus已经包含了MyBatis的所有功能,如果使用了重复的依赖,会导致冲突的问题。下面是一些解决方案的详细步骤。 1. 排除MyBatis依赖 在使用MyBatis-Plus时,可以通过在引入MyBatis-Plus的POM文件中,通过…

    Java 2023年5月20日
    00
  • SSH整合中 hibernate托管给Spring得到SessionFactory

    需要完成整合的总体目的: 将SSH框架中的Hibernate托管给Spring,获取SessionFactory对象并使用SessionFactory对象创建与数据库的会话。 为了达到使用Hibernate的目的,还需要配置 数据源、事务管理器、持久化类映射等。 达到以上目的,步骤如下: 1. 引入依赖 在POM文件中添加 Hibernate、Spring、…

    Java 2023年5月20日
    00
  • Mybatis对mapper的加载流程深入讲解

    下面是对”Mybatis对mapper的加载流程深入讲解”的详细讲解: 1、Mybatis mapper的概念 Mapper是Mybatis的一个核心概念,是连接Mybatis和JDBC的重要桥梁。Mybatis将SQL语句和映射规则分离出来,提供了mapper对SQL语句的注解和XML配置文件的支持,使得我们可以在mapper中定义SQL和对应的Java映…

    Java 2023年5月20日
    00
  • linux上传并配置jdk和tomcat的教程详解

    下面是 “linux上传并配置jdk和tomcat的教程详解”的完整攻略: 需要的工具和资源 JDK和Tomcat的安装包 一台Linux服务器和SSH工具(例如PuTTY) 一个用户账户,拥有sudo权限 上传JDK和Tomcat安装包 将JDK和Tomcat的安装包上传到Linux服务器上,可以使用scp命令,如下所示: scp /path/to/jdk…

    Java 2023年5月19日
    00
  • Java char[]数组转成String类型详细介绍

    下面是“Java char[]数组转成String类型详细介绍”的完整攻略。 1. String构造函数 在Java中,String类提供了一个构造函数,可以将字符数组转换为字符串。这个构造函数的语法为: String(char[] value) 其中,value是要转换的字符数组。下面是一个示例: char[] myCharArray = {‘H’, ‘e…

    Java 2023年5月26日
    00
  • Java数组,去掉重复值、增加、删除数组元素的方法

    Java数组是一种基本数据类型,通常用于存储一组相同类型的数据。常见的操作包括去掉重复值,增加数组元素以及删除数组元素等。本文将介绍Java数组的相关操作方法。 去掉重复值 我们可以利用set集合的特性来去掉数组中的重复值。下面是示例代码: int[] arr = {1, 2, 2, 3, 4, 4}; Set<Integer> set = ne…

    Java 2023年5月26日
    00
  • 详解Java的MyBatis框架中SQL语句映射部分的编写

    下面是详解Java的MyBatis框架中SQL语句映射部分的编写的攻略: 一、MyBatis框架中SQL语句映射部分的作用 MyBatis框架中的SQL语句映射部分,主要用于将Java中的对象属性映射到数据库表中的列,或将数据库表中的列映射到Java中的对象属性。通过这种映射方式,我们可以将数据库操作的流程自动化,提高开发效率。在MyBatis框架中,SQL…

    Java 2023年5月20日
    00
  • 基于spring boot 2和shiro实现身份验证案例

    实现基于Spring Boot 2和Shiro的身份验证,可以按以下步骤进行: 步骤一:创建Spring Boot项目 使用Spring Initializr或者其他方式创建一个Spring Boot项目。 步骤二:添加Shiro依赖 在项目的pom.xml中添加Shiro的依赖: <dependency> <groupId>org.…

    Java 2023年6月15日
    00
合作推广
合作推广
分享本页
返回顶部