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不相同即可