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 + '\'' +
'}';
}
}