zoukankan      html  css  js  c++  java
  • SpringBoot MyBatis使用多个数据源

    1.src/main/resources/application.properties

    #服务端口
    server.port=8080
    #应用名称
    spring.application.name=appdemo
    spring.thymeleaf.enabled=true
    spring.thymeleaf.prefix=classpath:/templates/
    spring.thymeleaf.suffix=.html
    logging.path=./
    #邮件配置
    spring.mail.host=mail.qq.com
    spring.mail.username=test.qq.com
    spring.mail.password=mail_password
    spring.mail.default-encoding=utf-8
    spring.mail.from=test.qq.com
    #oracle链接
    spring.ds_oracle.driver-class-name=oracle.jdbc.driver.OracleDriver
    spring.ds_oracle.url=jdbc:oracle:thin:@192.168.1.10:1521/orc
    spring.ds_oracle.username=username
    spring.ds_oracle.password=password
    spring.ds_oracle.max-wait: 10000
    spring.ds_oracle.max-active: 30
    spring.ds_oracle.test-on-borrow: true
    spring.ds_oracle.test-while-idle: true
    spring.ds_oracle.validation-query: select 1 
    spring.ds_oracle.max-idle: 5
    
    #mysql链接
    spring.ds_mysql.driver-class-name=com.mysql.jdbc.Driver
    spring.ds_mysql.url=jdbc:mysql://192.168.1.10:3306/appdemo?characterEncoding=utf-8
    spring.ds_mysql.username=username
    spring.ds_mysql.password=password
    spring.ds_mysql.max-wait: 10000
    spring.ds_mysql.max-active: 30
    spring.ds_mysql.test-on-borrow: true
    spring.ds_mysql.test-while-idle: true
    spring.ds_mysql.validation-query: select 1 
    spring.ds_mysql.max-idle: 5
    
    #sqlserver链接
    spring.ds_mssql.driver-class-name=com.microsoft.sqlserver.jdbc.SQLServerDriver
    spring.ds_mssql.url=jdbc:sqlserver://192.168.1.10:1433;DatabaseName=appdemo
    spring.ds_mssql.username=username
    spring.ds_mssql.password=password
    spring.ds_mssql.max-wait: 10000
    spring.ds_mssql.max-active: 30
    spring.ds_mssql.test-on-borrow: true
    spring.ds_mssql.test-while-idle: true
    spring.ds_mssql.validation-query: select 1 
    spring.ds_mssql.max-idle: 5

    2.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 http://maven.apache.org/xsd/maven-4.0.0.xsd">
        <modelVersion>4.0.0</modelVersion>
        <groupId>com</groupId>
        <artifactId>mydemo</artifactId>
        <version>1.0-SNAPSHOT</version>
        <packaging>jar</packaging>
        <name>mydemo</name>
        <parent>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-parent</artifactId>
            <version>1.5.9.RELEASE</version>
        </parent>
        <properties>
            <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
            <maven.compiler.source>1.8</maven.compiler.source>
            <maven.compiler.target>1.8</maven.compiler.target>
        </properties>
        <dependencies>
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-starter</artifactId>
            </dependency>
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-starter-web</artifactId>
            </dependency>
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-starter-thymeleaf</artifactId>
            </dependency>
            <dependency>
                <groupId>org.mybatis.spring.boot</groupId>
                <artifactId>mybatis-spring-boot-starter</artifactId>
                <version>1.3.2</version>
            </dependency>
            <dependency>
                <groupId>mysql</groupId>
                <artifactId>mysql-connector-java</artifactId>
            </dependency>
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-starter-mail</artifactId>
            </dependency>
            <dependency>
                <groupId>com.oracle</groupId>
                <artifactId>ojdbc6</artifactId>
                <version>11.1.0.7.0</version>
            </dependency>
        </dependencies>
       <build>
            <plugins>
                <plugin>
                    <groupId>org.springframework.boot</groupId>
                    <artifactId>spring-boot-maven-plugin</artifactId>
                    <executions>
                        <execution>
                            <goals>
                                <goal>repackage</goal>
                            </goals>
                        </execution>
                    </executions>
                </plugin>
                <plugin>
                    <artifactId>maven-resources-plugin</artifactId>
                    <configuration>
                        <encoding>utf-8</encoding>
                        <useDefaultDelimiters>true</useDefaultDelimiters>
                        <resources>
                            <resource>
                                <directory>src/main/resources</directory>
                                <filtering>true</filtering>
                            </resource>
                        </resources>
                    </configuration>
                </plugin>
            </plugins>
        </build>
    </project>

    3.配置数据源

    src/main/java/com/mydemo/conf/MSSQLDataSourceConfig.java

    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.core.io.support.PathMatchingResourcePatternResolver;
    import org.springframework.jdbc.datasource.DataSourceTransactionManager;
    
    import javax.sql.DataSource;
    
    @Configuration
    @MapperScan(basePackages = "com.mydemo.dao.mssql", sqlSessionTemplateRef = "mssqlSessionTemplate")
    public class MSSQLDataSourceConfig {
        @Bean(name = "mssqlDataSource")
        @ConfigurationProperties(prefix = "spring.ds_mssql")
        public DataSource mssqlDataSource() {
            return DataSourceBuilder.create().build();
        }
    
        @Bean(name = "mssqlSessionFactory")
        public SqlSessionFactory mssqlSessionFactory(@Qualifier("mssqlDataSource") DataSource dataSource) throws Exception {
            SqlSessionFactoryBean bean = new SqlSessionFactoryBean();
            bean.setDataSource(dataSource);
            bean.setMapperLocations(new PathMatchingResourcePatternResolver().getResources("classpath:mapper/mssql/*.xml"));
            return bean.getObject();
        }
    
        @Bean(name = "mssqlTransactionManager")
        public DataSourceTransactionManager mssqlTransactionManager(@Qualifier("mssqlDataSource") DataSource dataSource) {
            return new DataSourceTransactionManager(dataSource);
        }
    
        @Bean(name = "mssqlSessionTemplate")
        public SqlSessionTemplate mssqlSessionTemplate(@Qualifier("mssqlSessionFactory") SqlSessionFactory sqlSessionFactory) throws Exception {
            return new SqlSessionTemplate(sqlSessionFactory);
        }
    }

    src/main/java/com/mydemo/conf/MySqlDataSourceConfig.java

    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
    @MapperScan(basePackages = "com.mydemo.dao.mysql", sqlSessionTemplateRef = "mysqlSessionTemplate")
    public class MySqlDataSourceConfig {
    
        @Primary
        @Bean(name = "mysqlDataSource")
        @ConfigurationProperties(prefix = "spring.ds_mysql")
        public DataSource mysqlDataSource() {
            return DataSourceBuilder.create().build();
        }
    
        @Primary
        @Bean(name = "mysqlSessionFactory")
        public SqlSessionFactory mysqlSessionFactory(@Qualifier("mysqlDataSource") DataSource dataSource) throws Exception {
            SqlSessionFactoryBean bean = new SqlSessionFactoryBean();
            bean.setDataSource(dataSource);
            bean.setMapperLocations(new PathMatchingResourcePatternResolver().getResources("classpath:mapper/mysql/*.xml"));
            return bean.getObject();
        }
    
        @Primary
        @Bean(name = "mysqlTransactionManager")
        public DataSourceTransactionManager mysqlTransactionManager(@Qualifier("mysqlDataSource") DataSource dataSource) {
            return new DataSourceTransactionManager(dataSource);
        }
    
        @Primary
        @Bean(name = "mysqlSessionTemplate")
        public SqlSessionTemplate mysqlSessionTemplate(@Qualifier("mysqlSessionFactory") SqlSessionFactory sqlSessionFactory) throws Exception {
            return new SqlSessionTemplate(sqlSessionFactory);
        }
    }

    src/main/java/com/mydemo/conf/OracleDataSourceConfig.java

    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.core.io.support.PathMatchingResourcePatternResolver;
    import org.springframework.jdbc.datasource.DataSourceTransactionManager;
    
    import javax.sql.DataSource;
    
    @Configuration
    @MapperScan(basePackages = "com.mydemo.dao.oracle", sqlSessionTemplateRef = "oracleSessionTemplate")
    public class OracleDataSourceConfig {
        @Bean(name = "oracleDataSource")
        @ConfigurationProperties(prefix = "spring.ds_oracle")
        public DataSource oracleDataSource() {
            return DataSourceBuilder.create().build();
        }
    
        @Bean(name = "oracleSessionFactory")
        public SqlSessionFactory oracleSessionFactory(@Qualifier("oracleDataSource") DataSource dataSource) throws Exception {
            SqlSessionFactoryBean bean = new SqlSessionFactoryBean();
            bean.setDataSource(dataSource);
            bean.setMapperLocations(new PathMatchingResourcePatternResolver().getResources("classpath:mapper/oracle/*.xml"));
            return bean.getObject();
        }
    
        @Bean(name = "oracleTransactionManager")
        public DataSourceTransactionManager oracleTransactionManager(@Qualifier("oracleDataSource") DataSource dataSource) {
            return new DataSourceTransactionManager(dataSource);
        }
    
        @Bean(name = "oracleSessionTemplate")
        public SqlSessionTemplate oracleSessionTemplate(@Qualifier("oracleSessionFactory") SqlSessionFactory sqlSessionFactory) throws Exception {
            return new SqlSessionTemplate(sqlSessionFactory);
        }
    }

    4.创建映射xml

    分别创建各链接对应的mybatis xml文件
    src/main/resources/mapper/mysql/ProductMapper.xml
    src/main/resources/mapper/oracle/MemberMapper.xml
    src/main/resources/mapper/mssql/AdminMapper.xml

    示例mssql对应的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.mydemo.dao.mssql.AdminMapper">
        <resultMap id="BaseResultMap" type="com.mydemo.entities.Admin">
            <id column="id" property="id" jdbcType="VARCHAR"/>
            <result column="name" property="name" jdbcType="VARCHAR"/>
            <result column="email" property="email" jdbcType="VARCHAR"/>
            <result column="joindate" property="joindate" jdbcType="VARCHAR"/>
        </resultMap>
    
        <select id="findByEmail" parameterType="String" resultMap="BaseResultMap">
            select top 1 id ,name, email ,joindate from admin 
        </select>
    </mapper>

    5.创建映射类

    分别创建各链接对应的mybatis mapper类
    src/main/com/mydemo/dao/mysql/ProductMapper.java
    src/main/com/mydemo/dao/oracle/MemberMapper.java
    src/main/com/mydemo/dao/mssql/AdminMapper.java

    示例mssql对应的mapper类

    import com.mydemo.entities.Admin;
    import org.apache.ibatis.annotations.Mapper;
    
    import java.util.List;
    
    @Mapper
    public interface AdminMapper {
        Admin findByEmail(String email);
    }

    6.在controller或service层使用

    @RestController
    public class MailController {
    
        @Autowired
        ProductMapper productMapper;
    
        @Autowired
        MemberMapper memberMapper;
    
        @Autowired
        AdminMapper adminMapper;
        
        @Autowired
        ExamMapper examMapper;
    
        
        @Autowired
        private JavaMailSender javaMailSender;
    
        //发送邮件测试
        @RequestMapping("/mail/test")
        public void test() {
            SimpleMailMessage message = new SimpleMailMessage();
            message.setFrom("昵称 <test@qq.com>");
            message.setTo("zhang3@qq.com");
            message.setSubject("这是标题");
            message.setText("这是内容");
            javaMailSender.send(message);
        }
    
        @RequestMapping("/db/test")
        @ResponseBody
        public Object test2() {
            
            Admin admin = adminMapper.findByEmail("test@qq.com")
        }
    }

    7.启动项目

    import org.springframework.boot.SpringApplication;
    import org.springframework.boot.autoconfigure.SpringBootApplication;
    
    @SpringBootApplication
    public class App {
    
        public static void main(String[] args) {
    
            SpringApplication.run(App.class);
        }
    }
  • 相关阅读:
    NOIP2011 D1T1 铺地毯
    NOIP2013 D1T3 货车运输 倍增LCA OR 并查集按秩合并
    POJ 2513 trie树+并查集判断无向图的欧拉路
    599. Minimum Index Sum of Two Lists
    594. Longest Harmonious Subsequence
    575. Distribute Candies
    554. Brick Wall
    535. Encode and Decode TinyURL(rand and srand)
    525. Contiguous Array
    500. Keyboard Row
  • 原文地址:https://www.cnblogs.com/liuxm2017/p/12602990.html
Copyright © 2011-2022 走看看