阿里數據庫連接池Druid2

1 pom.xml依賴

<!-- 數據庫連接池 -->
<dependency>
    <groupId>com.alibaba</groupId>
	<artifactId>druid-spring-boot-starter</artifactId>
	<version>1.1.10</version>
</dependency>

<!-- 分頁插件-->
<dependency>
	<groupId>com.baomidou</groupId>
	<artifactId>mybatis-plus</artifactId>
	<version>2.1.9</version>
</dependency>

2 數據庫信息配置application.yml

spring:
  datasource:
    mysql:
      type: com.alibaba.druid.pool.DruidDataSource
      driver-class-name: com.mysql.cj.jdbc.Driver
      url: jdbc:mysql:/ip:3981/istance?characterEncoding=utf8&serverTimezone=UTC&useSSL=false&allowPublicKeyRetrieval=true&allowMultiQueries=true
      username: user
      password: password
      initialSize: 20
      maxActive: 50
      maxIdle: 0
      maxWait: 60000
      useUnfairLock: true
      poolPreparedStatements: false

3 Datasource初始化

package com.config;

import javax.sql.DataSource;

import org.apache.ibatis.plugin.Interceptor;
import org.apache.ibatis.session.SqlSessionFactory;
import org.mybatis.spring.SqlSessionTemplate;
import org.mybatis.spring.annotation.MapperScan;
import org.mybatis.spring.boot.autoconfigure.SpringBootVFS;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.boot.jdbc.DataSourceBuilder;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.Primary;
import org.springframework.core.env.Environment;
import org.springframework.core.io.support.PathMatchingResourcePatternResolver;
import org.springframework.jdbc.datasource.DataSourceTransactionManager;

import com.alibaba.druid.pool.DruidDataSource;
import com.baomidou.mybatisplus.spring.MybatisSqlSessionFactoryBean;

@Configuration
@MapperScan(basePackages={"com.mapper.master"}, sqlSessionTemplateRef="mySqlSessionTemplate")
public class MySqlDataSource {

	@Autowired
	Environment environment;

    @Autowired
    MybatisPlusConfig mybatisPlusConfig;
    
	/**
	 * 創建數據源
	 */
    @Bean(name="mySqlMasterDataSource")
    @ConfigurationProperties(prefix = "spring.datasource.mysql") // application-dev.yml中對應屬性的前綴
    @Primary
    public DataSource build() {
    	return	DataSourceBuilder.create().type(DruidDataSource.class).build();
    }

    /**
     * 根據數據源創建SqlSessionFactory
     * @param dataSource 數據源
     * @return
     * @throws Exception
     */
    @Bean(name="mySqlSessionFactory")
    @Primary
    public SqlSessionFactory getSqlSessionFactory(@Qualifier("mySqlMasterDataSource") DataSource dataSource) throws Exception {
        MybatisSqlSessionFactoryBean bean=new MybatisSqlSessionFactoryBean();
//        SqlSessionFactoryBean bean = new SqlSessionFactoryBean();
        bean.setDataSource(dataSource);  //設置數據源 (必須有,否則報錯)
        //bean.setMapperLocations(new PathMatchingResourcePatternResolver().getResources("classpath:mapper/kyz/*.xml")); //配置mapper路徑
        PathMatchingResourcePatternResolver resolver =  new PathMatchingResourcePatternResolver();
        bean.setMapperLocations(resolver.getResources(environment.getProperty("mybatis.mysql-mapper-locations")));    //*Mapper.xml位置
        bean.setTypeAliasesPackage(environment.getProperty("mybatis.type-aliases-package")); //實體類路徑
        bean.setPlugins(new Interceptor[]{
                mybatisPlusConfig.paginationInterceptor(),  mybatisPlusConfig.performanceInterceptor()
        });
        bean.setVfs(SpringBootVFS.class);
        return bean.getObject();
    }

    /**
     * 根據數據源配置事務管理器
     * @param dataSource
     * @return
     */
    @Bean(name="mysqlTransactionManager")
    @Primary
    public DataSourceTransactionManager getTransactionManager(@Qualifier("mySqlMasterDataSource") DataSource dataSource) {
        return new DataSourceTransactionManager(dataSource);
    }

    /**
     * SqlSessionTemplate: MyBatis提供的持久層訪問模板化的工具,線程安全,依賴注入SqlSessionFactory實例
     * @param sqlSessionFactory
     * @return
     * @throws Exception
     */
    @Bean(name="mySqlSessionTemplate")
    @Primary
    public SqlSessionTemplate getSqlSessionTemplate(@Qualifier("mySqlSessionFactory") SqlSessionFactory sqlSessionFactory) throws Exception {
        return new SqlSessionTemplate(sqlSessionFactory);
    }

}

4 分頁插件

package com.config;

import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.transaction.annotation.EnableTransactionManagement;

import com.baomidou.mybatisplus.plugins.PaginationInterceptor;
import com.baomidou.mybatisplus.plugins.PerformanceInterceptor;

@EnableTransactionManagement
@Configuration
public class MybatisPlusConfig {

    /**
     * 分頁插件
     */
    @Bean
    public PaginationInterceptor paginationInterceptor() {
        return new PaginationInterceptor();
    }
    /**
     * SQL執行效率插件
     */
    @Bean
    public PerformanceInterceptor performanceInterceptor() {
        return new PerformanceInterceptor();
    }

}

5 Datasource使用mapper.java

package com.mapper.master;

import com.entity.dto.CityDTO;
import java.util.List;
import java.util.Map;

public interface AreaDistributeMapper {

    List<CityDTO> getAllCity();

}

6 Datasource使用mapper.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.mapper.master.AreaDistributeMapper">
    <resultMap id="allcity" type="com.entity.dto.CityDTO">
        <result column="dimension_code" property="cityCode"/>
        <result column="dimension_desc" property="cityName"/>
    </resultMap>
    
 <select id="getAllCity" resultMap="allcity">
        select a.dimension_code as dimension_code,a.dimension_desc as dimension_desc
        from
        table_name a
        where a.dimension_type='city'
    </select>

</mapper>

7 結果實體類

package com.entity.dto;

public class CityDTO {
    private String cityCode;

    private String cityName;

    public String getCityCode() {
        return cityCode;
    }

    public void setCityCode(String cityCode) {
        this.cityCode = cityCode;
    }

    public String getCityName() {
        return cityName;
    }

    public void setCityName(String cityName) {
        this.cityName = cityName;
    }

    @Override
    public String toString() {
        return "CityDTO{" +
                "cityCode='" + cityCode + '\'' +
                ", cityName='" + cityName + '\'' +
                '}';
    }
}

 

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