springboot使用mybatis和jdbcTemplate搭建多数据源连接(mysql等)

源代码下载

链接:https://pan.baidu.com/s/1xXdbLuigUQYUtknaODew8A
提取码:x9jm

一 创建springboot项目

创建项目

我的IDE是IDEA

File->NEW -> Project
在这里插入图片描述
选择Spring Initializr 点击next
在这里插入图片描述
修改项目名等信息 --> 点击Next
在这里插入图片描述
选择 Lombok、Spring Web、JDBC API、MYSQL Driver 、Oracle Driver (我这里是阿里云的镜像 根据自己的镜像选择对应的Dependencies)
在这里插入图片描述

添加依赖

创建好后添加多数据源依赖

 <!-- druid连接池依赖 -->
        <!-- 如果使用druid-spring-boot-starter, 那么需要在启动类上使用@SpringBootApplication(exclude = DruidDataSourceAutoConfigure.class) -->
        <!--        <dependency>-->
        <!--            <groupId>com.alibaba</groupId>-->
        <!--            <artifactId>druid-spring-boot-starter</artifactId>-->
        <!--            <version>1.2.4</version>-->
        <!--        </dependency>-->
        <dependency>
            <groupId>com.alibaba</groupId>
            <artifactId>druid</artifactId>
            <version>1.2.4</version>
        </dependency>
        <!--多数据源依赖-->
        <dependency>
            <groupId>com.baomidou</groupId>
            <artifactId>dynamic-datasource-spring-boot-starter</artifactId>
            <version>3.3.1</version>
        </dependency>

在这里插入图片描述
完整版pom.xml

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.4.4</version>
        <relativePath/> <!-- lookup parent from repository -->
    </parent>
    <groupId>com.yuan</groupId>
    <artifactId>demoyuan</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <name>demoyuan</name>
    <description>Spring整合多数据源</description>
    <properties>
        <java.version>1.8</java.version>
    </properties>
    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-jdbc</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>

        <dependency>
            <groupId>com.oracle.database.jdbc</groupId>
            <artifactId>ojdbc8</artifactId>
            <scope>runtime</scope>
        </dependency>
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <scope>runtime</scope>
        </dependency>
        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
            <optional>true</optional>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>

        <!-- druid连接池依赖 -->
        <!-- 如果使用druid-spring-boot-starter, 那么需要在启动类上使用@SpringBootApplication(exclude = DruidDataSourceAutoConfigure.class) -->
        <!--        <dependency>-->
        <!--            <groupId>com.alibaba</groupId>-->
        <!--            <artifactId>druid-spring-boot-starter</artifactId>-->
        <!--            <version>1.2.4</version>-->
        <!--        </dependency>-->
        <dependency>
            <groupId>com.alibaba</groupId>
            <artifactId>druid</artifactId>
            <version>1.2.4</version>
        </dependency>
        <!--多数据源依赖-->
        <dependency>
            <groupId>com.baomidou</groupId>
            <artifactId>dynamic-datasource-spring-boot-starter</artifactId>
            <version>3.3.1</version>
        </dependency>

        <!-- mybatis-plus-->
        <dependency>
            <groupId>com.baomidou</groupId>
            <artifactId>mybatis-plus-boot-starter</artifactId>
            <version>3.2.0</version>
        </dependency>
        <!-- framework: mybatis-plus代码生成需要一个模板引擎 -->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-freemarker</artifactId>
        </dependency>
        <!--mp代码生成器-->
        <dependency>
            <groupId>com.baomidou</groupId>
            <artifactId>mybatis-plus-generator</artifactId>
            <version>3.2.0</version>
        </dependency>

    </dependencies>

    <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
                <configuration>
                    <excludes>
                        <exclude>
                            <groupId>org.projectlombok</groupId>
                            <artifactId>lombok</artifactId>
                        </exclude>
                    </excludes>
                </configuration>
            </plugin>
        </plugins>
    </build>

</project>


创建application.yml
在这里插入图片描述
代码:

# DataSource Config
spring:
  datasource:
    dynamic:
      primary: master # 配置默认数据库
      datasource:
        resources:
          static-locations: classpath:/static/
        master: # 数据源1配置
          #    我的本地連接要將uerSSL改成true 或者將driver-class-name 改成com.mysql.jdbc.Driver驱动
          #    因为mysql5及之前的版本使用的是旧版驱动"com.mysql.jdbc.Driver",
          #    mysql6以及之后的版本需要更新到新版驱动,对应的Driver是"com.mysql.cj.jdbc.Driver"
          # 换成自己的ip+库 mysql的配置
          url: jdbc:mysql://127.0.0.1:3306/tongbu?characterEncoding=utf8&useUnicode=true&useSSL=true&serverTimezone=GMT%2B8
          username: root
          password: 123456
          # mysql5用 com.mysql.jdbc.Driver mysql6以上com.mysql.cj.jdbc.Driver
          driver-class-name: com.mysql.jdbc.Driver
        slave: # 数据源2 mysql 配置 
          url: jdbc:mysql://127.0.0.1:3306/tongbu2?characterEncoding=utf8&useUnicode=true&useSSL=false&serverTimezone=GMT%2B8
          username: root
          password: 123456
          driver-class-name: com.mysql.cj.jdbc.Driver
        slave2: # 数据源2配置 oracle的配置
          url: jdbc:oracle:thin:@192.168.188.103:1521:helowin
          username: LSZ
          password: 123
          driver-class-name: oracle.jdbc.driver.OracleDriver
logging: #myabtis log Plugin配置
  level:
    com: debug




创建mapper (使用mybatis整合mysql1的数据)

创建TableDao.java
@DS 注解 : (@DS=数据源名称) 具体详情可以百度一下 这个很重要

@DS注解可用于方法或类上。若同时存在,则方法上的注解优先于类上的注解。
官网推荐@DS注解在service层使用,且是实现类上使用,在接口层无效。
注解用在service实现或mapper接口方法上,
不要同时在service和mapper注解 。

在这里插入图片描述

package com.yuan.demoyuan.mapper;

import com.baomidou.dynamic.datasource.annotation.DS;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Select;

import java.util.List;
import java.util.Map;

@Mapper
@DS("slave")
public interface TableDao {

    //查询当前库的所有表 信息  0
    @Select("select * from information_schema.TABLES where TABLE_SCHEMA=(select database())")
    List<Map> listTable();

    //查询当前表的所有字段和信息 0
    @Select("select * from information_schema.COLUMNS where TABLE_SCHEMA = (select database()) and TABLE_NAME=#{tableName}")
    List<Map> listTableColumn(String tableName);



    //查询当前表的所有信息    1 仅返回对象
    @Select("select TABLE_NAME from information_schema.TABLES where TABLE_SCHEMA=(select database())")
    List<String> listTableName2();

    //查询当前表的所有信息    1 返回字段名称和对象
    @Select("SELECT * FROM ${columnName}")
    List<Map> list(String columnName);

}

创建jdbcTemplate(使用mybatis整合mysql2的数据)

创建UserService2.java 和 UserServiceImpl2.java
在这里插入图片描述

  • UserService2.java
package com.yuan.demoyuan.service;

import com.baomidou.mybatisplus.extension.service.IService;
import org.springframework.stereotype.Service;

import java.util.List;
import java.util.Map;

/**
 * <p>
 *  服务类
 * </p>
 *
 * @author 深林中的书海
 * @since 2021-03-24
 */
@Service
public interface UserService2  {

    List<Map<String, Object>> selectAll();
}


  • UserServiceImpl2.java
package com.yuan.demoyuan.service.serviceimpl;

import com.baomidou.dynamic.datasource.annotation.DS;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;

import com.yuan.demoyuan.service.UserService2;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.stereotype.Service;

import java.util.List;
import java.util.Map;

/**
 * <p>
 *  服务实现类
 * </p>
 *
 * @author 深林中的书海
 * @since 2021-03-24
 */

/**
 *
 * jdbcTemplate整合数据源
 */
@Service
public class UserServiceImpl2  implements UserService2 {



    @Autowired
    private JdbcTemplate jdbcTemplate;

    @DS("slave")
    public List<Map<String, Object>> selectAll(){
        List<Map<String, Object>> lists = jdbcTemplate.queryForList("select * from user1");
        return lists;
    }





}

使用Test测试

在这里插入图片描述

package com.yuan.demoyuan;

import com.yuan.demoyuan.mapper.TableDao;
import com.yuan.demoyuan.service.UserService2;
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;

import java.util.List;
import java.util.Map;

@SpringBootTest
class DemoyuanApplicationTests {

    @Autowired
    TableDao tableDao;

    @Autowired
    UserService2 userService2;


    @Test
    void contextLoads() {
        System.err.println("调用TableDao测试 调用mysql1的");
        List<Map> maps = tableDao.listTable();
        maps.forEach(m->{
            m.forEach((k,v)->{
                System.err.println("打印k:"+k+"\t打印v:"+v);
            });
        });
        System.out.println();
        System.err.println("jdbcTemplate整合数据源 整合mysql2");
        userService2.selectAll();
        List<Map<String, Object>> maps1 = userService2.selectAll();
        maps1.forEach(m->{
            m.forEach((k,v)->{
                System.err.println("打印k:"+k+"\t打印v:"+v);
            });
        });
    }

    /**
     * 调用TableDao测试 调用mysql1的
     */
    @Test
    void listTable() {
        List<Map> maps = tableDao.listTable();
        maps.forEach(m->{
            m.forEach((k,v)->{
                System.err.println("打印k:"+k+"\t打印v:"+v);
            });
        });

    }

    /**
     * jdbcTemplate整合数据源
     * 整合mysql2
     */
    @Test
    void selectAll() {
        userService2.selectAll();
        List<Map<String, Object>> maps = userService2.selectAll();
        maps.forEach(m->{
            m.forEach((k,v)->{
                System.err.println("打印k:"+k+"\t打印v:"+v);
            });
        });

    }
}


测试效果

在这里插入图片描述

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
Spring Boot中配置多个数据源可以通过使用多个DataSource来实现。以下是配置MySQL和Oracle数据源的步骤: 1. 引入依赖 在pom.xml文件中添加如下依赖: ```xml <!-- MySQL驱动 --> <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> </dependency> <!-- Oracle驱动 --> <dependency> <groupId>com.oracle</groupId> <artifactId>ojdbc6</artifactId> <version>11.2.0.4</version> </dependency> ``` 2. 配置数据源 在application.yml或application.properties文件中,添加以下配置: ```yaml # MySQL 数据源配置 spring.datasource.mysql.url=jdbc:mysql://localhost:3306/mysql?useSSL=false&serverTimezone=UTC&characterEncoding=utf8 spring.datasource.mysql.username=root spring.datasource.mysql.password=root spring.datasource.mysql.driver-class-name=com.mysql.jdbc.Driver # Oracle 数据源配置 spring.datasource.oracle.url=jdbc:oracle:thin:@localhost:1521:orcl spring.datasource.oracle.username=system spring.datasource.oracle.password=oracle spring.datasource.oracle.driver-class-name=oracle.jdbc.driver.OracleDriver ``` 3. 配置JdbcTemplate 在配置完数据源后,我们可以使用Spring提供的JdbcTemplate来操作数据库。在代码中,我们需要分别创建两个JdbcTemplate对象,如下所示: ```java @Configuration public class DataSourceConfig { @Bean(name = "mysqlJdbcTemplate") public JdbcTemplate mysqlJdbcTemplate(@Qualifier("mysqlDataSource") DataSource dataSource) { return new JdbcTemplate(dataSource); } @Bean(name = "oracleJdbcTemplate") public JdbcTemplate oracleJdbcTemplate(@Qualifier("oracleDataSource") DataSource dataSource) { return new JdbcTemplate(dataSource); } @Bean(name = "mysqlDataSource") @ConfigurationProperties(prefix = "spring.datasource.mysql") public DataSource mysqlDataSource() { return DataSourceBuilder.create().build(); } @Bean(name = "oracleDataSource") @ConfigurationProperties(prefix = "spring.datasource.oracle") public DataSource oracleDataSource() { return DataSourceBuilder.create().build(); } } ``` 在上面的代码中,我们使用@Qualifier注解来指定不同的数据源。我们还定义了两个JdbcTemplate对象,并使用@ConfigurationProperties注解将数据源配置注入到DataSource对象中。这样,我们就可以在代码中通过@Autowired注解来使用这两个JdbcTemplate对象了。 需要注意的是,如果你使用了JPA或MyBatis等持久化框架来操作数据库,那么你需要在这些框架的配置文件中指定不同的数据源。
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值