SpringBoot 基礎(一) mybatis 通過druid配置多數據庫

本次使用sqlServer和MySQL;Oracle本機沒有安裝,所以先留到以後

demo地址

項目目錄結構

 

 

 

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是通過類型進行加載

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章