Springboot整合Mybatis,連接多個數據庫(Mysql+Oracle)


Springboot整合Mybatis,連接多個數據庫,其實和mybatis連接單個數據庫基本一致,只是在對應包下面引入對應的數據源即可,下面是maven依賴,需要注意的是mysql使用的版本

 1     <dependencies>
 2         <dependency>
 3             <groupId>com.oracle.database.jdbc</groupId>
 4             <artifactId>ojdbc8</artifactId>
 5             <scope>runtime</scope>
 6         </dependency>
 7         <dependency>
 8             <groupId>mysql</groupId>
 9             <artifactId>mysql-connector-java</artifactId>
10             <version>5.1.30</version>
11         </dependency>
12         <!--Druid依賴代碼   收藏代碼-->
13         <dependency>
14             <groupId>com.alibaba</groupId>
15             <artifactId>druid</artifactId>
16             <version>0.2.15</version>
17         </dependency>
18     </dependencies>

application.properties配置文件

 1 #Spring boot視圖配置
 2 spring.mvc.view.prefix=/WEB-INF/view/
 3 spring.mvc.view.suffix=.jsp
 4 #靜態文件訪問配置
 5 spring.mvc.static-path-pattern=/static/**
 6 
 7 #加載Mybatis的xml 在:resources下
 8 mybatis.mapper-locations=classpath*:/com/spring/login/mapper/mysql/*.xml,classpath*:/com/spring/login/mapper/oracle/*.xml 
9
10 #設置運行的端口 11 server.port=8080 12 13 #配置字符編碼 14 server.servlet.encoding.enabled=true 15 server.servlet.encoding.force=true 16 server.servlet.encoding.charset=UTF-8 17 18 server.tomcat.uri-encoding=UTF-8 19 20 #取消thymeleaf 嚴格檢查 21 spring.thymeleaf.mode=LEGACYHTML5 22 23 #連接Oracle數據庫 24 oracle.datasource.driver-class-name= oracle.jdbc.driver.OracleDriver 25 oracle.datasource.url= jdbc:oracle:thin:@你的地址:1521/orcl 26 oracle.datasource.username=賬號 27 oracle.datasource.password=密碼 28 29 #配置連接mySql數據庫 30 spring.datasource.url=jdbc:mysql://你的地址:3306/test?useSSL=false&useUnicode=true&characterEncoding=utf-8 31 spring.datasource.username=賬號 32 spring.datasource.password=密碼 33 spring.datasource.driver-class-name=com.mysql.jdbc.Driver

看一下目錄結構,既,不同的數據庫我放在了DAO里不同的包里了,主要是為了區分

 

 

 在config里新建了兩個config類,分別是配置mysql以及oracle數據源使用的,需要注意的是,兩個或者多個數據源時,一定要制定一個(只有一個)為主數據源,下面時兩個數據源代碼

 1 package com.spring.login.config;
 2 
 3 import com.alibaba.druid.pool.DruidDataSource;
 4 import org.apache.ibatis.session.SqlSessionFactory;
 5 import org.mybatis.spring.SqlSessionFactoryBean;
 6 import org.mybatis.spring.SqlSessionTemplate;
 7 import org.mybatis.spring.annotation.MapperScan;
 8 import org.springframework.beans.factory.annotation.Qualifier;
 9 import org.springframework.beans.factory.annotation.Value;
10 import org.springframework.context.annotation.Bean;
11 import org.springframework.context.annotation.Configuration;
12 import org.springframework.context.annotation.Primary;
13 import org.springframework.core.io.support.PathMatchingResourcePatternResolver;
14 import org.springframework.jdbc.datasource.DataSourceTransactionManager;
15 
16 import javax.sql.DataSource;
17 
18 @SuppressWarnings("all")
19 @Configuration
20 @MapperScan(basePackages = "com.spring.login.dao.mysql", sqlSessionTemplateRef = "mysqlSqlSessionTemplate")
21 public class MysqlDataSourceConfig {
22     @Value("${spring.datasource.url}")
23     private String url;
24     @Value("${spring.datasource.username}")
25     private String user;
26     @Value("${spring.datasource.password}")
27     private String password;
28     @Value("${spring.datasource.driver-class-name}")
29     private String driverClass;
30 
31     @Bean(name = "mysqlDataSource")
32     @Primary
33     public DataSource mysqlDataSource() {
34         DruidDataSource dataSource = new DruidDataSource();
35         dataSource.setUrl(url);
36         dataSource.setUsername(user);
37         dataSource.setPassword(password);
38         dataSource.setDriverClassName(driverClass);
39         return (DataSource) dataSource;
40     }
41 
42     @Bean(name = "mysqlTransactionManager")
43     @Primary
44     public DataSourceTransactionManager mysqlTransactionManager(@Qualifier("mysqlDataSource") DataSource dataSource) {
45         return new DataSourceTransactionManager(dataSource);
46     }
47 
48     @Bean(name = "mysqlSqlSessionFactory")
49     @Primary
50     public SqlSessionFactory mysqlSqlSessionFactory(@Qualifier("mysqlDataSource") DataSource dataSource) throws Exception {
51         final SqlSessionFactoryBean bean = new SqlSessionFactoryBean();
52         bean.setDataSource(dataSource);
53         bean.setMapperLocations(new PathMatchingResourcePatternResolver().getResources("classpath*:/com/spring/login/mapper/mysql/*.xml"));
54         org.apache.ibatis.session.Configuration configuration = new org.apache.ibatis.session.Configuration();
55         configuration.setMapUnderscoreToCamelCase(true);
56         configuration.setCallSettersOnNulls(true);
57         configuration.setLogImpl(org.apache.ibatis.logging.stdout.StdOutImpl.class);
58         bean.setConfiguration(configuration);
59         return bean.getObject();
60     }
61 
62     @Bean(name = "mysqlSqlSessionTemplate")
63     @Primary
64     public SqlSessionTemplate mysqlSqlSessionTemplate(@Qualifier("mysqlSqlSessionFactory") SqlSessionFactory sqlSessionFactory) throws Exception {
65         return new SqlSessionTemplate(sqlSessionFactory);
66     }
67 }

oracle連接數據源

 1 package com.spring.login.config;
 2 
 3 import com.alibaba.druid.pool.DruidDataSource;
 4 import org.apache.ibatis.session.SqlSessionFactory;
 5 import org.mybatis.spring.SqlSessionFactoryBean;
 6 import org.mybatis.spring.SqlSessionTemplate;
 7 import org.mybatis.spring.annotation.MapperScan;
 8 import org.springframework.beans.factory.annotation.Qualifier;
 9 import org.springframework.beans.factory.annotation.Value;
10 import org.springframework.context.annotation.Bean;
11 import org.springframework.context.annotation.Configuration;
12 import org.springframework.core.io.support.PathMatchingResourcePatternResolver;
13 import org.springframework.jdbc.datasource.DataSourceTransactionManager;
14 
15 import javax.sql.DataSource;
16 
17 @SuppressWarnings("all")
18 @Configuration
19 @MapperScan(basePackages = "com.spring.login.dao.oracle", sqlSessionTemplateRef = "oracleSqlSessionTemplate")
20 public class OracleDataSourceConfig {
21     @Value("${oracle.datasource.url}")
22     private String url;
23 
24     @Value("${oracle.datasource.username}")
25     private String user;
26 
27     @Value("${oracle.datasource.password}")
28     private String password;
29 
30     @Value("${oracle.datasource.driver-class-name}")
31     private String driverClass;
32 
33     @Bean(name = "oracleDataSource")
34     public DataSource oracleDataSource() {
35         DruidDataSource dataSource = new DruidDataSource();
36         dataSource.setDriverClassName(driverClass);
37         dataSource.setUrl(url);
38         dataSource.setUsername(user);
39         dataSource.setPassword(password);
40         return dataSource;
41     }
42 
43     @Bean(name = "oracleTransactionManager")
44     public DataSourceTransactionManager oracleTransactionManager() {
45         return new DataSourceTransactionManager(oracleDataSource());
46     }
47 
48     @Bean(name = "oracleSqlSessionFactory")
49     public SqlSessionFactory oracleSqlSessionFactory(@Qualifier("oracleDataSource") DataSource oracleDataSource) throws Exception {
50         final SqlSessionFactoryBean bean = new SqlSessionFactoryBean();
51         bean.setDataSource(oracleDataSource);
52         bean.setMapperLocations(new PathMatchingResourcePatternResolver().getResources("classpath*:/com/spring/login/mapper/oracle/*.xml"));
53         org.apache.ibatis.session.Configuration configuration = new org.apache.ibatis.session.Configuration();
54         configuration.setMapUnderscoreToCamelCase(true);
55         configuration.setCallSettersOnNulls(true);
56         configuration.setLogImpl(org.apache.ibatis.logging.stdout.StdOutImpl.class);
57         bean.setConfiguration(configuration);
58         return bean.getObject();
59     }
60 
61     @Bean(name = "oracleSqlSessionTemplate")
62     public SqlSessionTemplate oracleSqlSessionTemplate(@Qualifier("oracleSqlSessionFactory") SqlSessionFactory sqlSessionFactory) throws Exception {
63         return new SqlSessionTemplate(sqlSessionFactory);
64     }
65 }

其他的調用和單數據源一致我這里就不多講了,后面在啟動類上加載注入需要的文件

 1 package com.spring;
 2 
 3 import org.mybatis.spring.annotation.MapperScan;
 4 import org.springframework.boot.SpringApplication;
 5 import org.springframework.boot.autoconfigure.SpringBootApplication;
 6 import org.springframework.boot.autoconfigure.jdbc.DataSourceAutoConfiguration;
 7 import org.springframework.stereotype.Controller;
 8 import org.springframework.web.bind.annotation.RequestMapping;
 9 
10 /**
11  * 表示取消數據源的自動配置
12  */
13 @Controller
14 @RequestMapping("/")
15 @SpringBootApplication(exclude = {DataSourceAutoConfiguration.class},scanBasePackages = {"com.*"})
16 @MapperScan({"com.spring.login.mapper.mysql","com.spring.login.mapper.oracle"})17 public class WebApplication {
18 
19     public static void main(String[] args) {
20         SpringApplication.run(WebApplication.class, args);
21         System.out.println("項目啟動成功!");
22     }
23     
24 }

 Mybatis查詢mysql結果

 Mybatis查詢oracle結果

 

 

備注,如果有三個或者更多個數據源,@Bean(name = "mysqlDataSource"),這個name不相同即可


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM