本次使用sqlServer和MySQL;Oracle本機沒有安裝,所以先留到以後
項目目錄結構
1首先去pom種引入相關的maven
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>1.5.9.RELEASE</version>
<relativePath/>
</parent>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
<java.version>1.7</java.version>
</properties>
<dependencies>
<!-- springboot 相關-->
<dependency>
<groupId>org.example</groupId>
<artifactId>01.Spring-Boot-Config</artifactId>
<version>1.0-SNAPSHOT</version>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.mybatis.spring.boot</groupId>
<artifactId>mybatis-spring-boot-starter</artifactId>
<version>2.0.1</version>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
<!--sqlserver 驅動 -->
<dependency>
<groupId>com.microsoft.sqlserver</groupId>
<artifactId>mssql-jdbc</artifactId>
<version>6.4.0.jre8</version>
<scope>runtime</scope>
</dependency>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<optional>true</optional>
</dependency>
<!-- mysql驅動 -->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>8.0.22</version>
</dependency>
<!-- druid數據源驅動 -->
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>druid-spring-boot-starter</artifactId>
<version>1.1.10</version>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
2.然後再添加application.yml文件,這裏有兩種配置方式
方式1:
spring: datasource: druid: # 數據庫訪問配置, 使用druid數據源 # 數據源1 mysql mysql: type: com.alibaba.druid.pool.DruidDataSource driver-class-name: com.mysql.cj.jdbc.Driver url: jdbc:mysql://127.0.0.1:33068/test?useUnicode=true&characterEncoding=utf8&serverTimezone=Asia/Shanghai username: root password: Ee123 # 數據源2 sqlserver sqlserver: type: com.alibaba.druid.pool.DruidDataSource driver-class-name: com.microsoft.sqlserver.jdbc.SQLServerDriver url: jdbc:sqlserver://localhost:1433;DatabaseName=test username: sa password: Ee123 # # 數據源3 oracle # oracle: # type: com.alibaba.druid.pool.DruidDataSource # driver-class-name: oracle.jdbc.driver.OracleDriver # url: jdbc:oracle:thin:@localhost:1521:ORCL # username: test # password: 123456 # 連接池配置 initial-size: 5 min-idle: 5 max-active: 20 # 連接等待超時時間 max-wait: 30000 # 配置檢測可以關閉的空閒連接間隔時間 time-between-eviction-runs-millis: 60000 # 配置連接在池中的最小生存時間 min-evictable-idle-time-millis: 300000 validation-query: select '1' from dual test-while-idle: true test-on-borrow: false test-on-return: false # 打開PSCache,並且指定每個連接上PSCache的大小 pool-prepared-statements: true max-open-prepared-statements: 20 max-pool-prepared-statement-per-connection-size: 20 # 配置監控統計攔截的filters, 去掉後監控界面sql無法統計, 'wall'用於防火牆 filters: stat,wall # Spring監控AOP切入點,如x.y.z.service.*,配置多個英文逗號分隔 aop-patterns: com.springboot.servie.*
方式2:(這裏是顯示了數據庫相關的配置,其餘省略)
spring: datasource: mysql: #數據源1 driverClassName: com.mysql.cj.jdbc.Driver url: jdbc:mysql://127.0.0.1:33068/test?useUnicode=true&characterEncoding=utf8&serverTimezone=Asia/Shanghai username: root password: Ee123 type: com.alibaba.druid.pool.DruidDataSource sqlserver: #數據源3 driverClassName: com.microsoft.sqlserver.jdbc.SQLServerDriver url: jdbc:sqlserver://localhost:1433;DatabaseName=test username: sa password: Ee123 type: com.alibaba.druid.pool.DruidDataSource
3.配置dataSource
mysql:(sql寫在xml文件種)
@Configuration @MapperScan(basePackages = "com.item.springboot.mysqldao") public class MysqlDatasourceConfig { //因爲都是 DataSource 類型,二配置多個dataSource都會用到這個·,所以通過起名稱,通過名字來區分 @Primary @Bean(value = "mysqldataSource")
//目前使用application.yml 的是方式2 中的配置,如果使用方式1 則需要改爲@ConfigurationProperties("spring.datasource.druid.mysql") @ConfigurationProperties("spring.datasource.mysql") public DataSource mysqlDataSource() { return DruidDataSourceBuilder.create().build(); } @Primary @Bean public DataSourceTransactionManager mysqlTransactionManager(@Qualifier("mysqldataSource") DataSource dataSource) { return new DataSourceTransactionManager(dataSource); } @Primary @Bean public SqlSessionFactory mysqlSqlSessionFactory(@Qualifier("mysqldataSource") DataSource dataSource) throws Exception { final SqlSessionFactoryBean sessionFactory=new SqlSessionFactoryBean(); sessionFactory.setDataSource(dataSource); //如果不使用xml的方式配置mapper,則可以省去下面這行mapper location的配置。 sessionFactory.setMapperLocations(new PathMatchingResourcePatternResolver().getResources("classpath:mapper/mysql/*.xml")); return sessionFactory.getObject(); } }
sqlServer:(sql寫在項目中)
@Configuration @MapperScan(basePackages = "com.item.springboot.sqlserverMapper") public class SqlServerDataSourceConfig { //數據源 //@Primary
//目前使用application.yml 的是方式2 中的配置,如果使用方式1 則需要改爲@ConfigurationProperties("spring.datasource.druid.mysql")
@ConfigurationProperties(prefix = "spring.datasource.sqlserver") @Bean public DataSource tailDataSource(){ return new DruidDataSource(); } //@Primary @Bean public DataSourceTransactionManager utailTransactionManager(@Qualifier("tailDataSource") DataSource dataSource) { return new DataSourceTransactionManager(dataSource); } //@Primary @Bean public SqlSessionFactory tailSqlSessionFactory(@Qualifier("tailDataSource") DataSource dataSource) throws Exception { SqlSessionFactoryBean bean = new SqlSessionFactoryBean(); bean.setDataSource(dataSource); // bean.setMapperLocations(new PathMatchingResourcePatternResolver().getResources("classpath*:templates/test/*.xml")); return bean.getObject(); } }
4.sqlServer調用(簡潔模式)
持久層:sqlserverMapper=》StudentMapper
@Mapper public interface StudentMapper { @Select(" select * from test ") List<Map<String, Object>> getAll(); }
調用
@Repository @Mapper public interface StudentMapper { @Select(" select * from test ") List<Map<String, Object>> getAll(); }
5.mysql調用(傳統模式)
5.1 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.item.springboot.mysqldao.MysqlStudentMapper"> <select id="getAllStudents" resultType="java.util.Map"> select * from student </select> </mapper>
5.2mysqldao層實現對xml文件中數據庫的調用
@Mapper @Repository public interface MysqlStudentMapper { List<Map<String, Object>> getAllStudents(); }
5.3service.impl實現對dao層的調用
@Service("studentService") public class StudentServiceImpl implements StudentService { @Autowired private MysqlStudentMapper mysqlStudentMapper; @Override public List<Map<String, Object>> getAllStudentsFromMysql() { return this.mysqlStudentMapper.getAllStudents(); } }
5.4 service層對service.impl的調用
public interface StudentService { List<Map<String, Object>> getAllStudentsFromMysql(); }
5.5 controller
@Autowired private StudentService studentService; @RequestMapping("querystudentsfrommysql") public List<Map<String, Object>> queryStudentsFromMysql(){ return studentService.getAllStudentsFromMysql(); }
注意·當前兩個dataSource是不能同時使用的(mysql和sqlServer再同一時間只能使用一個),因爲在dataSource文件夾下配置的是同種類型。spring是通過類型進行加載