spring boot +mysql + mybatis + druid的整理(一)——单数据源

一,使用spring boot脚手架搭建spring boot框架生成maven项目

如下图所示:

设置自定义的坐标,即左侧的Group和Artifact,右侧可以搜索添加一些依赖,搜索不到的可以在pom文件中手动添加,本文需要的依赖如下:

        <dependency>
            <groupId>org.mybatis.spring.boot</groupId>
            <artifactId>mybatis-spring-boot-starter</artifactId>
            <version>1.3.1</version>
        </dependency>
        

        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <scope>runtime</scope>
        </dependency>
        
        <dependency>
            <groupId>com.alibaba</groupId>
            <artifactId>druid</artifactId>
            <version>1.0.25</version>
        </dependency>
        <!-- 分页插件 -->
        
        <dependency>
            <groupId>com.github.pagehelper</groupId>
            <artifactId>pagehelper</artifactId>
            <version>4.1.6</version>
        </dependency>
    

引入所需依赖jar包后,就可以开始集成mybatis和druid了。

二,集成druid

本文采用properties文件的形式进行配置,根据自己习惯,亦可选用yml文件进行相关配置。

1.在application.properties写入以下配置:

#主数据库的配置
#spring.datasource.name = test 多数据源时可配
#spring.datasource.type = com.alibaba.druid.pool.DruidDatasource
spring.datasource.driverClassName = com.mysql.jdbc.Driver
spring.datasource.url = jdbc:mysql://IP:port/数据库名称?useUnicode=true&amp;characterEncoding=utf8&amp;allowMultiQueries=true&amp;autoReconnect=true
spring.datasource.username = ***
spring.datasource.password = ***

#连接池的补充设置
#初始化、最小、最大
spring.datasource.initialSize = 1
spring.datasource.minIdle = 1
spring.datasource.maxActive = 20
#获取连接等待超时的时间、毫秒(1m)
spring.datasource.maxWait = 60000
#检测关闭空闲连接的间隔时间、毫秒(1m),当空闲连接大于(minEvictableIdleTimeMillis),则关闭物理连接
spring.datasource.timeBetweenEvictionRunsMillis = 60000
#一个连接在池中最小的生存时间、毫秒(5m)
spring.datasource.minEvictableIdleTimeMillis = 300000
#监控统计拦截的filters,去掉后监控界面sql无法统计,'wall用于防火墙','log4j'用于日志
spring.datasource.druid.sys.filters = stat,wall,log4j
#用于检测连接是否有效的语句
spring.datasource.validationQuery=SELECT 'x'
#检测连接的超时时间、秒
spring.datasource.validationQueryTimeout = 3
#申请连接时,空闲时间大于(timeBetweenEvictionRunsMillis),则检测连接的有效性
spring.datasource.testWhileIdle = true
#申请连接时,检测连接的有效性(性能损耗)
spring.datasource.testOnBorrow = false
#归还连接时,检测连接的有效性(性能损耗)
spring.datasource.testOnReturn = false

有关druid的配置信息,可移步Druid查看,本文不再赘述。

2.编写DruidConfig,如下:

import java.util.Properties;

import javax.sql.DataSource;

import org.springframework.beans.factory.annotation.Autowired;
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 com.alibaba.druid.pool.DruidDataSourceFactory;


@Configuration
public class DruidConfig {
    //配置文件
    @Autowired
    private Environment env;
    @Bean
    //默认为主数据源
    @Primary
    public DataSource getDataSource() throws Exception{
     //此处不推荐使用实例化一个DruidDataSource的方式,进行数据源的配置,采用DruidDataSourceFactory的方式创建DataSource实例,原理分析可查看设计模式之工厂模式。 Properties properties
= new Properties(); properties.put("driverClassName", env.getProperty("spring.datasource.driverClassName")); properties.put("url", env.getProperty("spring.datasource.url")); properties.put("username", env.getProperty("spring.datasource.username")); properties.put("password", env.getProperty("spring.datasource.password")); properties.put("initialSize", env.getProperty("spring.datasource.initialSize")); properties.put("minIdle", env.getProperty("spring.datasource.minIdle")); properties.put("maxActive", env.getProperty("spring.datasource.maxActive")); properties.put("maxWait", env.getProperty("spring.datasource.maxWait")); properties.put("timeBetweenEvictionRunsMillis", env.getProperty("spring.datasource.timeBetweenEvictionRunsMillis")); properties.put("minEvictableIdleTimeMillis", env.getProperty("spring.datasource.minEvictableIdleTimeMillis")); properties.put("validationQuery", env.getProperty("spring.datasource.validationQuery")); properties.put("filters", env.getProperty("spring.datasource.druid.sys.filters")); properties.put("validationQueryTimeout", env.getProperty("spring.datasource.validationQueryTimeout")); properties.put("testWhileIdle", env.getProperty("spring.datasource.testWhileIdle")); properties.put("testOnBorrow", env.getProperty("spring.datasource.testOnBorrow")); properties.put("testOnReturn", env.getProperty("spring.datasource.testOnReturn")); return DruidDataSourceFactory.createDataSource(properties); } }

druid集成完毕。

三,集成mybatis

1.在application.properties中写入以下配置

# mybatis_config  
# mapper.xml的文件地址
mybatis.mapperLocations=classpath:mybatis/mapper/*.xml
mybatis.typeAliasesPackage=****

2.编写MybatisConfig,如下:

import java.util.Properties;

import javax.sql.DataSource;

import org.apache.ibatis.plugin.Interceptor;
import org.apache.ibatis.session.SqlSessionFactory;
import org.mybatis.spring.SqlSessionFactoryBean;
import org.mybatis.spring.SqlSessionTemplate;
import org.mybatis.spring.annotation.MapperScan;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.autoconfigure.AutoConfigureAfter;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.transaction.PlatformTransactionManager;
import org.springframework.transaction.annotation.EnableTransactionManagement;
import org.springframework.transaction.annotation.TransactionManagementConfigurer;
import org.springframework.core.env.Environment;
import org.springframework.core.io.Resource;
import org.springframework.core.io.support.PathMatchingResourcePatternResolver;
import org.springframework.jdbc.datasource.DataSourceTransactionManager;

import com.github.pagehelper.PageHelper;

@Configuration
@AutoConfigureAfter({DruidConfig.class})
//扫描dao层,basePackages 为dao层所在路径,支持通配符*,多个以,分隔
@MapperScan(basePackages = "")
@EnableTransactionManagement
public class MyBatisConfig implements TransactionManagementConfigurer{
    @Autowired
    //配置文件
    private Environment env;
    @Autowired
    //默认为配置文件中的数据源
    DataSource dataSource;
    
    //根据数据源创建sqlSessionFactory
    @Bean
    public SqlSessionFactoryBean sqlSessionFactoryBean() throws Exception{
        SqlSessionFactoryBean factoryBean = new SqlSessionFactoryBean();
        //指定数据源
        factoryBean.setDataSource(dataSource);
        //指定封装类所在包
        factoryBean.setTypeAliasesPackage(env.getProperty("mybatis.typeAliasesPackage"));
        //指定mapper.xml文件所在
        Resource[] resource = new PathMatchingResourcePatternResolver().getResources(env.getProperty("mybatis.mapperLocations"));
        factoryBean.setMapperLocations(resource);
        
        //添加分页插件
        PageHelper pageHelper = new PageHelper();
        Properties properties = new Properties();
        properties.setProperty("reasonable", "true");
        properties.setProperty("supportMethodsArguments", "true");
        properties.setProperty("returnPageInfo", "check");
        properties.setProperty("params", "count=countSql");
        pageHelper.setProperties(properties);
        factoryBean.setPlugins(new Interceptor[]{pageHelper});
        return factoryBean;
    }
    
    @Bean
    public SqlSessionTemplate sqlSessionTemplate(SqlSessionFactory sqlSessionFactory){
        return new SqlSessionTemplate(sqlSessionFactory);
    }
    
    @Bean
    @Override
    public PlatformTransactionManager annotationDrivenTransactionManager() {
        return new DataSourceTransactionManager(dataSource);
    }

}

至此,集成完毕。

 

posted on 2018-01-19 17:28  节奏35  阅读(1850)  评论(0编辑  收藏  举报

导航