简单快速的用SpringBoot集成多数据源(mybatis)

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/qq_36481052/article/details/79370111
 SpringBoot集成多数据源就是一个项目里有多个数据库:效果如图:

这里写图片描述
第一步:在application.properties中添加如下代码:

#这里写代码片#表示操作test001的数据库
spring.datasource.test001.url=jdbc:mysql://localhost:3306/test001?autoReconnect=true&useUnicode=true&characterEncoding=utf-8
spring.datasource.test001.username=root
spring.datasource.test001.password=root
spring.datasource.test001.driverClassName=com.mysql.jdbc.Driver


#表示操作test002的数据库
spring.datasource.test002.url=jdbc:mysql://localhost:3306/test002?autoReconnect=true&useUnicode=true&characterEncoding=utf-8
spring.datasource.test002.username=root
spring.datasource.test002.password=root
spring.datasource.test002.driverClassName=com.mysql.jdbc.Driver

第二步,在创建datasource.DataSourceConfig001和datasource.DatasourcConfig002,结构如图:
这里写图片描述
datasource.DataSourceConfig001,代码如下:

package com.demo.datasource;

import com.sun.tracing.ProbeName;
import org.apache.ibatis.session.SqlSessionFactory;
import org.mybatis.spring.SqlSessionFactoryBean;
import org.mybatis.spring.SqlSessionTemplate;
import org.mybatis.spring.annotation.MapperScan;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.boot.autoconfigure.jdbc.DataSourceBuilder;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.Primary;
import org.springframework.core.io.support.PathMatchingResourcePatternResolver;
import org.springframework.jdbc.datasource.DataSourceTransactionManager;

import javax.sql.DataSource;
import javax.xml.crypto.Data;


@Configuration  //将其注入到SpringBoot容器中
@MapperScan(basePackages = "com.demo.test001",sqlSessionFactoryRef = "test001SqlSessionFactory")
public class DataSourceConfig001 {

    /**
     * 配置test001 数据库
     */
    @Bean(name = "test001DataSource")
    @Primary //默认执行test001数据库(必须只能添加在一个数据库连接名上,不然会报错)
    @ConfigurationProperties(prefix = "spring.datasource.test001")
    public DataSource test001DataSource() {
        return DataSourceBuilder.create().build();
    }

    /**
     * 配置test001 sql会话工厂
     */
    @Bean(name = "test001SqlSessionFactory")
    @Primary
    public SqlSessionFactory test001SqlSessionFactory(@Qualifier("test001DataSource") DataSource dataSource) throws Exception {
        SqlSessionFactoryBean bean = new SqlSessionFactoryBean();
        bean.setDataSource(dataSource);
        //配置mapper.xml文件访问路径
        bean.setMapperLocations(new
                PathMatchingResourcePatternResolver().getResources("classpath:mapper/*.xml"));

        //返回
        return bean.getObject();

    }

    /**
     * 
     * 配置test001 事物管理
     */
    @Bean(name = "test001TransactionManager")
    public DataSourceTransactionManager test001TransactionManager(@Qualifier("test001DataSource") DataSource dataSource) {
        return new DataSourceTransactionManager(dataSource);
    }

    @Bean()
    public SqlSessionTemplate test001(@Qualifier("test001SqlSessionFactory") SqlSessionFactory sqlSessionFactory){
        return new SqlSessionTemplate(sqlSessionFactory);
    }
}

datasource.DataSourceConfig002,代码如下:

package com.demo.datasource;

import org.apache.ibatis.session.SqlSessionFactory;
import org.mybatis.spring.SqlSessionFactoryBean;
import org.mybatis.spring.SqlSessionTemplate;
import org.mybatis.spring.annotation.MapperScan;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.boot.autoconfigure.jdbc.DataSourceBuilder;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.Primary;
import org.springframework.core.io.support.PathMatchingResourcePatternResolver;
import org.springframework.jdbc.datasource.DataSourceTransactionManager;

import javax.sql.DataSource;


@Configuration  //将其注入到SpringBoot容器中
@MapperScan(basePackages = "com.demo.test002",sqlSessionFactoryRef = "test002SqlSessionFactory")
public class DataSourceConfig002 {

    /**
     * 配置test002 数据库
     */
    @Bean(name = "test002DataSource"
    @ConfigurationProperties(prefix = "spring.datasource.test002")
    public DataSource test002DataSource() {
        return DataSourceBuilder.create().build();
    }

    /**
     * 配置test002 sql会话工厂
     */
    @Bean(name = "test002SqlSessionFactory")
    public SqlSessionFactory test002SqlSessionFactory(@Qualifier("test002DataSource") DataSource dataSource) throws Exception {
        SqlSessionFactoryBean bean = new SqlSessionFactoryBean();
        bean.setDataSource(dataSource);
        //配置mapper.xml文件访问路径
        bean.setMapperLocations(new
                PathMatchingResourcePatternResolver().getResources("classpath:mapper/*.xml"));

        //返回
        return bean.getObject();

    }

    /**
     *
     * 配置test002 事物管理
     */
    @Bean(name = "test002TransactionManager")
    public DataSourceTransactionManager test002TransactionManager(@Qualifier("test002DataSource") DataSource dataSource) {
        return new DataSourceTransactionManager(dataSource);
    }

    @Bean()
    public SqlSessionTemplate test002(@Qualifier("test002SqlSessionFactory") SqlSessionFactory sqlSessionFactory){
        return new SqlSessionTemplate(sqlSessionFactory);
    }
}

这是最核心的部分,已经完事了;

第三步,test001.test001Dao和test002.test002Dao代码分别如下:
test001.test001Dao:

package com.demo.test001;

import com.demo.entity.Student;

public interface test001Dao {

    //测试
    int insert(Student student);
}

mapper.test001.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的类-->
<mapper namespace="com.demo.test001.test001Dao">

    <insert id="insert" parameterType="com.demo.entity.Student">
      INSERT INTO test001.student(
        id,
        name,
        age
      )VALUES (
        #{id},
        #{name},
        #{age}
      )
    </insert>
</mapper>

test002.test002Dao

package com.demo.test002;

import com.demo.entity.Student;

public interface test002Dao {

    //测试
    int insert(Student student);
}

mapper.test002.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的类-->
<mapper namespace="com.demo.test002.test002Dao">

    <insert id="insert" parameterType="com.demo.entity.Student">
      INSERT INTO test002.student(
        id,
        name,
        age
      )VALUES (
        #{id},
        #{name},
        #{age}
      )
    </insert>
</mapper>

第四步,写个controller测试一下(这里我省掉了service)

package com.demo.controller.impl;

import com.demo.entity.Student;
import com.demo.test001.test001Dao;
import com.demo.test002.test002Dao;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

import javax.annotation.Resource;

@RestController
public class DemoControllerImpl {

    @Resource
    private test001Dao test001Dao;

    @Resource
    private test002Dao test002Dao;

    @RequestMapping("/test001")
    public String test001() {
        Student student = new Student();
        student.setId(1);
        student.setName("zhangsan");
        student.setAge(12);
        int row = test001Dao.insert(student);
        return "test001";
    }

    @RequestMapping("/test002")
    public String test002() {
        Student student = new Student();
        student.setId(1);
        student.setName("lisi");
        student.setAge(12);
        int row = test002Dao.insert(student);
        return "test002";
    }
}

启动项目,运行一下我的
URL1:localhost:8080/test001,
URL2:localhost:8080/test002
效果如图:
这里写图片描述

这就完事了,应该很简单的,请路过的大神多多指导,如果此文帮到您了,请帮我点个赞,谢谢各位大神。。。。。。

猜你喜欢

转载自blog.csdn.net/qq_36481052/article/details/79370111