微人事第五天:springboot整合mabatis多数据源

之前讲过springboot整合mybatis对一个数据库进行crud操作,现在来将mybatis对多个数据库进行操作。
1.创建spring boot项目
项目的选择和pom.xml文件的修改都是相同的,这里就不写了
2.配置两个数据库的连接信息
这里用自定义的One和Two来区分:

spring.datasource.one.url=jdbc:mysql://127.0.0.1:3306/javaboy?characterEncoding=UTF-8
spring.datasource.one.username=root
spring.datasource.one.password=root
spring.datasource.one.driver-class-name=com.mysql.jdbc.Driver

spring.datasource.two.url=jdbc:mysql://127.0.0.1:3306/javaboy2?characterEncoding=UTF-8
spring.datasource.two.username=root
spring.datasource.two.password=root
spring.datasource.two.driver-class-name=com.mysql.jdbc.Driver

3.配置DataSources和SqlSessionFactory
因为配置文件改为自定义了,所以springboot自动配置失效了,这里需要手动添加(参考springboot整合JdbcTemplate多项数据源):
DataSources配置:

package org.javaboy.mybatis2.config;

        import com.alibaba.druid.spring.boot.autoconfigure.DruidDataSourceBuilder;
        import org.springframework.boot.context.properties.ConfigurationProperties;
        import org.springframework.context.annotation.Bean;
        import org.springframework.context.annotation.Configuration;

        import javax.sql.DataSource;

@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();
    }
}

sqlSessionFactory和sqlSessionTemplate:

package org.javaboy.mybatis2.config;

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.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

import javax.annotation.Resource;
import javax.sql.DataSource;

@Configuration
@MapperScan(basePackages = "org.javaboy.mybatis2.mapper1",sqlSessionFactoryRef = "sqlSessionFactory1",
        sqlSessionTemplateRef = "sqlSessionTemplate1")
public class MyBatisConfigOne {

    @Resource(name = "dsOne")
    DataSource dsOne;

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

    @Bean
    SqlSessionTemplate sqlSessionTemplate1() {
        return new SqlSessionTemplate(sqlSessionFactory1());
    }
}

package org.javaboy.mybatis2.config;

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.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

import javax.annotation.Resource;
import javax.sql.DataSource;

@Configuration
@MapperScan(basePackages = "org.javaboy.mybatis2.mapper2",sqlSessionFactoryRef = "sqlSessionFactory2",
        sqlSessionTemplateRef = "sqlSessionTemplate2")
public class MyBatisConfigTwo {

    @Resource(name = "dsTwo")
    DataSource dsTwo;

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

    @Bean
    SqlSessionTemplate sqlSessionTemplate2() {
        return new SqlSessionTemplate(sqlSessionFactory2());
    }
}

4.配置实体类User
属性和数据库中的字段需保持一致,且提供get,set方法

package org.javaboy.mybatis2.bean;

public class User {
    private Integer id;
    private String username;
    private String address;

    public Integer getId() {
        return id;
    }

    public void setId(Integer id) {
        this.id = id;
    }

    public String getUsername() {
        return username;
    }

    public void setUsername(String username) {
        this.username = username;
    }

    public String getAddress() {
        return address;
    }

    public void setAddress(String address) {
        this.address = address;
    }

    @Override
    public String toString() {
        return "User{" +
                "id=" + id +
                ", username='" + username + '\'' +
                ", address='" + address + '\'' +
                '}';
    }
}

5.mapper和xml文件
这里由于要操作两个数据库所以需要分开配置:

package org.javaboy.mybatis2.mapper1;

import org.javaboy.mybatis2.bean.User;

import java.util.List;

public interface UserMapper1 {
    List<User> getAllUsers();
}

<?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.mybatis2.mapper1.UserMapper1">
    <select id="getAllUsers" resultType="org.javaboy.mybatis2.bean.User">
        select * from user;
    </select>
</mapper>

package org.javaboy.mybatis2.mapper2;

import org.javaboy.mybatis2.bean.User;

import java.util.List;

public interface UserMapper2 {
    List<User> getAllUsers();
}

<?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.mybatis2.mapper2.UserMapper2">
    <select id="getAllUsers" resultType="org.javaboy.mybatis2.bean.User">
        select * from user;
    </select>
</mapper>

6.最后测试

package org.javaboy.mybatis2;

import org.javaboy.mybatis2.bean.User;
import org.javaboy.mybatis2.mapper1.UserMapper1;
import org.javaboy.mybatis2.mapper2.UserMapper2;
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;

import java.util.List;

@SpringBootTest
class Mybatis2ApplicationTests {

    @Autowired
    private UserMapper2 userMapper2;

    @Autowired
    private UserMapper1 userMapper1;

    @Test
    void contextLoads() {
        List<User> allUsers = userMapper1.getAllUsers();
        System.out.println(allUsers);
        List<User> allUsers1 = userMapper2.getAllUsers();
        System.out.println(allUsers1);
    }

}

在这里插入图片描述

发布了287 篇原创文章 · 获赞 24 · 访问量 2万+

猜你喜欢

转载自blog.csdn.net/qq_41998938/article/details/104039408