springboot中使用 mybatis 和 Druid 连接池对数据库进行操作

WEB工程中使用 mybatis 和 Druid 连接池非常多,这里简单介绍一下在springboot 2.0中的使用例子,使用的MS SQL Server 2008数据库,工程项目的准备工作;工程样本建立;工程导入Eclipse开发环境,下载相关依赖JAR包步骤参考前一篇博文,这里省略,仅仅展示关键之处,整个工程结构如下图,

springboot中使用 mybatis 和 Druid 连接池对数据库进行操作_第1张图片

一,工程 pom.xml 修改,引入druid数据库链接池和相应数据库对应的依赖jar包,内容如下,



	4.0.0

	com.qyh
	springBoot01Database
	0.0.1-SNAPSHOT
	jar

	springBoot01Database
	Demo project for Spring Boot

	
		org.springframework.boot
		spring-boot-starter-parent
		2.0.2.RELEASE
		 
	

	
		UTF-8
		UTF-8
		1.8
	

	
		
			org.springframework.boot
			spring-boot-starter-data-rest
		
		
			org.springframework.boot
			spring-boot-starter-jdbc
		
		
			org.springframework.boot
			spring-boot-starter-thymeleaf
		
		
			org.springframework.boot
			spring-boot-starter-web
		
		
			org.mybatis.spring.boot
			mybatis-spring-boot-starter
			1.3.2
		
		
		
		
			com.microsoft.sqlserver
			mssql-jdbc
			runtime
		
		 
		 
		
		
		
		 
		
		  
		
          
            com.alibaba  
            druid  
            1.1.2  
        
		
		 
		
			org.springframework.boot
			spring-boot-starter-test
			test
		
		
		
		
		    org.springframework.boot
		    spring-boot-devtools
		    true
		    test
		
	

	
		compile
		springBoot01Database
		
			
				org.springframework.boot
				spring-boot-maven-plugin
				
	                
	                true
	            
			
		
	


二,配置文件 application.properties 文件修改
为方便在开发,测试,生成三种环境之间切换,配置文件分为三个,即: application-dev.properties,application-test.properties,application-prod.properties,然后 application.properties 仅仅配置一行使用其中一种环境即可, springboot启动读取的是 application.properties 配置文件,需要注意的是, mybatis 指定的实体包,本地是配置XML文件和数据库表到实体的映射XML文件需要在配置文件中指定,如下为各个配置文件,
#===================================================
# application-dev.properties
#===================================================
# server evn setting
#===================================================
server.address=127.0.0.1
server.port=8080
server.servlet.contextPath=/
server.session-timeout=30

#=====For springMVC setting=====  
spring.thymeleaf.prefix=classpath:/templates/
#spring.thymeleaf.suffix=.html

spring.mvc.view.prefix=/WEB-INF/view/
spring.mvc.view.suffix=.jsp


#===================================================
# database setting
#===================================================
#=====For connect ms sql server use jdbc pool=====
#use dependency: jdbc[default] and mybatis-spring-boot-starter-1.1.1.jar
spring.datasource.type=com.alibaba.druid.pool.DruidDataSource
spring.datasource.driverClassName=com.microsoft.sqlserver.jdbc.SQLServerDriver
spring.datasource.url=jdbc:sqlserver://localhost:1433;databaseName=myDBName
spring.datasource.username=dbUserName
spring.datasource.password=dbPassword


#=====For connect mysql use jdbc pool=====
#spring.datasource.driverClassName=com.mysql.jdbc.Driver  
#spring.datasource.url=jdbc:mysql://127.0.0.1:3306/myDBName?zeroDateTimeBehavior=convertToNull&useUnicode=true&characterEncoding=utf-8  
#spring.datasource.username=DBUserName  
#spring.datasource.password=DBPassword  


#=====For connect oracle db use jdbc pool=====
#spring.datasource.driverClassName=oracle.jdbc.OracleDriver
#spring.datasource.url=jdbc:oracle:thin:@localhost:1521:oracleSID
#spring.datasource.username=DBUserName 
#spring.datasource.password=DBPassword


#=====For common dataSource setting info=====
spring.datasource.initialSize=10
spring.datasource.minIdle=10
spring.datasource.maxActive=120
spring.datasource.maxWait=60000
spring.datasource.timeBetweenEvictionRunsMillis=60000
spring.datasource.minEvictableIdleTimeMillis=300000
spring.datasource.validationQuery=SELECT 1 
spring.datasource.testWhileIdle=true
spring.datasource.testOnBorrow=false
spring.datasource.testOnReturn=false
spring.datasource.poolPreparedStatements=true
spring.datasource.maxPoolPreparedStatementPerConnectionSize=20
spring.datasource.filters=stat,wall
#spring.datasource.filters=stat,wall,log4j
spring.datasource.connectionProperties=druid.stat.mergeSql=true;druid.stat.slowSqlMillis=5000


#=====For mybatis setting======
mybatis.typeAliasesPackage=com.qyh.pro01.model,com.qyh.pro01.param
mybatis.configLocations=classpath:config/mybatisConfig.xml
#main thing is setting alias, can not use configLocations
mybatis.mapperLocations=classpath:mapper/*.xml


#===================================================
# other setting
#===================================================
#===================================================
#application.properties
#===================================================
spring.profiles.active=dev
#active dev evn
三,mybatis的本地配置文件,
mybatis的本地配置文件主要是定义实体的别名,同时还有数据库连接的一些基本信息(可以不设置), 整个文件可以不用,为完整这里使用,代码如下,



	
	
	
	
    
    
	
		
	
	
	
	
    
    
   


此外还有库表到JAVA实体对应的各个映射mapper的XML文件,此处省略。

四,编写自定义数据源类,目的是产生DataSource和SqlSessionFactory并注入spring容器中,类正确使用相应注解,并确保其所在的包在启动类中扫描到,代码如下,

package com.qyh.pro01.common;

import java.sql.SQLException;
import javax.sql.DataSource;
import org.apache.ibatis.session.SqlSessionFactory;
import org.mybatis.spring.SqlSessionFactoryBean;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
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.Resource;
import org.springframework.core.io.support.PathMatchingResourcePatternResolver;
import com.alibaba.druid.pool.DruidDataSource;

/**
 * @author shenzhenNBA
 * @since 2018.06.10
 * 自定义数据源类
 */

@Configuration    //该注解类似于spring配置文件  
public class MyDataSourceConfig {
	private Logger logger = LoggerFactory.getLogger(MyDataSourceConfig.class);  
	
	@Autowired  
    private Environment env; 
	//使用该实例读取项目资源路径下application.properties文件中的内容
	
	@Value("${spring.datasource.type}") //读取配置文件中指定KEY的值到变量中
    private String dbType;    
	
	@Value("${spring.datasource.url}")    
    private String dbUrl;    
        
    @Value("${spring.datasource.username}")    
    private String username;    
        
    @Value("${spring.datasource.password}")    
    private String password;    
        
    @Value("${spring.datasource.driverClassName}")    
    private String driverClassName;    
        
    @Value("${spring.datasource.initialSize}")    
    private int initialSize;    
        
    @Value("${spring.datasource.minIdle}")    
    private int minIdle;    
        
    @Value("${spring.datasource.maxActive}")    
    private int maxActive;    
        
    @Value("${spring.datasource.maxWait}")    
    private int maxWait;    
        
    @Value("${spring.datasource.timeBetweenEvictionRunsMillis}")    
    private int timeBetweenEvictionRunsMillis;    
        
    @Value("${spring.datasource.minEvictableIdleTimeMillis}")    
    private int minEvictableIdleTimeMillis;    
        
    @Value("${spring.datasource.validationQuery}")    
    private String validationQuery;    
        
    @Value("${spring.datasource.testWhileIdle}")    
    private boolean testWhileIdle;    
        
    @Value("${spring.datasource.testOnBorrow}")    
    private boolean testOnBorrow;    
        
    @Value("${spring.datasource.testOnReturn}")    
    private boolean testOnReturn;    
        
    @Value("${spring.datasource.poolPreparedStatements}")    
    private boolean poolPreparedStatements;    
        
    @Value("${spring.datasource.maxPoolPreparedStatementPerConnectionSize}")    
    private int maxPoolPreparedStatementPerConnectionSize;    
        
    @Value("${spring.datasource.filters}")    
    private String filters;    
        
    @Value("{spring.datasource.connectionProperties}")    
    private String connectionProperties;  

    @Bean  		//产生bean实例加载进srping容器中,与spring配置文件中配置bean一样
    @Primary  	//当有多个实现时以此为优先为准
    public DataSource getDataSource() throws Exception{  
    	DruidDataSource datasource = new DruidDataSource(); 
    	
    	//datasource.setDbType(dbType);   //有些版本不支持该属性
    	datasource.setUrl(dbUrl);
    	//datasource.setUrl(env.getProperty("spring.datasource.url"));
    	//使用Environment对象实例读取property文件中指定key的值,配置文件读取方式之一
    	
    	datasource.setDriverClassName(driverClassName);
        datasource.setUsername(username);
        datasource.setPassword(password);
        
        //configuration    
        datasource.setInitialSize(initialSize);    
        datasource.setMinIdle(minIdle);    
        datasource.setMaxActive(maxActive);    
        datasource.setMaxWait(maxWait);    
        datasource.setTimeBetweenEvictionRunsMillis(timeBetweenEvictionRunsMillis);    
        datasource.setMinEvictableIdleTimeMillis(minEvictableIdleTimeMillis);    
        datasource.setValidationQuery(validationQuery);    
        datasource.setTestWhileIdle(testWhileIdle);    
        datasource.setTestOnBorrow(testOnBorrow);    
        datasource.setTestOnReturn(testOnReturn);    
        datasource.setPoolPreparedStatements(poolPreparedStatements);    
        datasource.setMaxPoolPreparedStatementPerConnectionSize(maxPoolPreparedStatementPerConnectionSize);    
        try {    
            datasource.setFilters(filters);    
        } catch (SQLException e) {    
            logger.error("druid configuration initialization filter", e);    
        }
        datasource.setConnectionProperties(connectionProperties);    
    	return datasource;
    } 
    
    
	@Bean 	//产生bean实例加载进srping容器中,与spring配置文件中配置bean一样
    public SqlSessionFactory sqlSessionFactory(DataSource ds) throws Exception{  
        SqlSessionFactoryBean sqlSFB = new SqlSessionFactoryBean();  
        sqlSFB.setDataSource(ds);	
        //指定自定义的数据源,这个必须用,否则报错  
        
        sqlSFB.setTypeAliasesPackage(env.getProperty("mybatis.typeAliasesPackage")); 
        //指定对应的实体包,多个包之间逗号隔开 
        
        Resource configLocationResource = new PathMatchingResourcePatternResolver().getResource(
        		env.getProperty("mybatis.configLocations"));
        sqlSFB.setConfigLocation(configLocationResource);
        //指定mybatis的本地配置文件资源,目的是定义实体等别名,可以不用,如果不用对应配置文件应注释掉
        
        Resource[] mapperLocations = new PathMatchingResourcePatternResolver().getResources(
        		env.getProperty("mybatis.mapperLocations"));
        sqlSFB.setMapperLocations(mapperLocations);
        //指定mybatis的库表到实体的映射xml文件的mapper资源  
        
        return sqlSFB.getObject();  
    }
    
}
五,启动类中相关功能注解使用
因为要使用 Druid 和 mybatis 对数据库进行操作, 所以必须在启动类中使用相应的注解并扫描各个相应的包,然后目标包中的各个含有各种注解的类对应的实例才能加载进spring容器中,才能使用;比如使用 @EntityScan扫描实体对应所在的包, @MapperScan扫描DAO层定义的接口所在的包, @ComponentScan扫描controller,service等所在的包,如下为启动类代码,
package com.qyh.springBootApp;
import org.mybatis.spring.annotation.MapperScan;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.boot.autoconfigure.domain.EntityScan;
import org.springframework.context.annotation.ComponentScan;

/**
 * springboot+mybatis+druid+mssqlserver例子
 * @author shenzhenNBA
 * @since 2018.06.10
 */

@SpringBootApplication  //标注为启动类
@EntityScan("com.qyh.pro01.model,com.qyh.pro01.param")  //扫描实体所在的包
@MapperScan("com.qyh.pro01.dao")          //扫描DAO接口所在的包
@ComponentScan("com.qyh.pro01.common"     //扫描自定义数据源所在的包
		+ ",com.qyh.pro01.controller"     //扫描控制器所在的包
		+ ",com.qyh.pro01.service.impl")  //扫描业务接口实现类所在的包
public class SpringBoot01DBApplication {

	public static void main(String[] args) {
		SpringApplication.run(SpringBoot01DBApplication.class, args);
	}
	
}

当项目启动后,对数据库进行操作时即可看到 Druid 已经进行了初始化,如下图所示,

springboot中使用 mybatis 和 Druid 连接池对数据库进行操作_第2张图片

以上设置完即可在项目中使用 Druid 数据源连接池了,总的来说要使用 Druid首先需要引入 Druid 依赖JAR包和对应各种数据库的依赖JAR包,其次在properties配置文件中设置对应的数据源信息,然后编写mybatis对应本地配置XML文件(主要定义实体别名,这个不是必须),再然后编写自定义的数据源类,最后在启动类中扫描到自定义数据源的类,这样即可使用 druid 数据源了, 此为俺做的例子,欢迎拍砖讨论....


你可能感兴趣的:(管理者/开发者,Java,数据库,druid,mybatis,数据库,springboot)