SpringBoot 集成MyBatis ,druid 数据源

Spring Boot 集成MyBatis

maven创建java项目
mvn archetype:generate -DgroupId=com.aisino.shop -DartifactId=shop_task -DarchetypeArtifactId=maven-archetype-quickstart -DinteractiveMode=false

在集成MyBatis前,我们先配置一个druid数据源。

 

1,pox.xml

  1 <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  2 xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
  3 <modelVersion>4.0.0</modelVersion>
  4 <groupId>com.aisino.shop</groupId>
  5 <artifactId>shop_task</artifactId>
  6 <packaging>war</packaging>
  7 <version>0.0.1-SNAPSHOT</version>
  8 <name>shop_task Webapp</name>
  9 
 10 <parent>
 11 <groupId>org.springframework.boot</groupId>
 12 <artifactId>spring-boot-starter-parent</artifactId>
 13 <version>1.4.0.RELEASE</version>
 14 </parent>
 15 
 16 <properties>
 17 <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
 18 <version.spring>4.3.7.RELEASE</version.spring>
 19 <java.version>1.8</java.version>
 20 </properties>
 21 <dependencies>
 22 <dependency>
 23 <groupId>org.springframework.boot</groupId>
 24 <artifactId>spring-boot-starter-web</artifactId>
 25 </dependency>
 26 <dependency>
 27 <groupId>org.springframework.boot</groupId>
 28 <artifactId>spring-boot-starter-thymeleaf</artifactId>
 29 </dependency>
 30 <dependency>
 31 <groupId>org.springframework.boot</groupId>
 32 <artifactId>spring-boot-starter-jdbc</artifactId>
 33 </dependency>
 34 <dependency>
 35 <groupId>org.springframework.boot</groupId>
 36 <artifactId>spring-boot-starter-actuator</artifactId>
 37 </dependency>
 38 
 39 <!--mybatis start-->
 40 <dependency>
 41 <groupId>org.mybatis</groupId>
 42 <artifactId>mybatis-spring</artifactId>
 43 <version>1.2.2</version>
 44 </dependency>
 45 <dependency>
 46 <groupId>org.mybatis</groupId>
 47 <artifactId>mybatis</artifactId>
 48 <version>3.2.8</version>
 49 </dependency>
 50 <!--mybatis end-->
 51 
 52 <dependency>
 53 <groupId>org.apache.tomcat</groupId>
 54 <artifactId>tomcat-jdbc</artifactId>
 55 </dependency>
 56 
 57 <!--druid start-->
 58 <dependency>
 59 <groupId>com.alibaba</groupId>
 60 <artifactId>druid</artifactId>
 61 <version>1.0.5</version>
 62 </dependency>
 63 <!--druid end-->
 64 
 65 <!--mysql start-->
 66 <dependency>
 67 <groupId>mysql</groupId>
 68 <artifactId>mysql-connector-java</artifactId>
 69 </dependency>
 70 <!--mysql end-->
 71 
 72 <!--fast json start-->
 73 <dependency>
 74 <groupId>com.alibaba</groupId>
 75 <artifactId>fastjson</artifactId>
 76 <version>1.2.14</version>
 77 </dependency>
 78 <!--fast json end-->
 79 
 80 </dependencies>
 81 <build>
 82 <finalName>shop_task</finalName>
 83 <!--spring boot plugin start-->
 84 <plugins>
 85 <plugin>
 86 <groupId>org.springframework.boot</groupId>
 87 <artifactId>spring-boot-maven-plugin</artifactId>
 88 <!--配置热部署-->
 89 <dependencies>
 90 <dependency>
 91 <groupId>org.springframework</groupId>
 92 <artifactId>springloaded</artifactId>
 93 <version>1.2.0.RELEASE</version>
 94 </dependency>
 95 </dependencies>
 96 </plugin>
 97 </plugins>
 98 <!--spring boot plugin end-->
 99 </build>
100 </project>

 

2,application.properties

 1 server.port=8888
 2 server.contextPath=/task
 3 
 4 spring.datasource.url = jdbc:mysql://127.0.0.1:3306/test
 5 spring.datasource.username = root
 6 spring.datasource.password = 123456
 7 spring.datasource.type = com.alibaba.druid.pool.DruidDataSource
 8 spring.datasource.driver-class-name = com.mysql.jdbc.Driver
 9 spring.datasource.filters = stat
10 spring.datasource.maxActive = 20
11 spring.datasource.initialSize = 1
12 spring.datasource.maxWait = 60000
13 spring.datasource.minIdle = 1
14 spring.datasource.timeBetweenEvictionRunsMillis = 60000
15 spring.datasource.minEvictableIdleTimeMillis = 300000
16 spring.datasource.validationQuery = select 'x'
17 spring.datasource.testWhileIdle = true
18 spring.datasource.testOnBorrow = false
19 spring.datasource.testOnReturn = false
20 spring.datasource.poolPreparedStatements = true
21 spring.datasource.maxOpenPreparedStatements = 20

 

3,配置自定义数据源

  1 import java.sql.SQLException;
  2 
  3 import javax.sql.DataSource;
  4 
  5 import org.slf4j.Logger;
  6 import org.slf4j.LoggerFactory;
  7 import org.springframework.beans.factory.annotation.Value;
  8 import org.springframework.boot.web.servlet.FilterRegistrationBean;
  9 import org.springframework.boot.web.servlet.ServletRegistrationBean;
 10 import org.springframework.context.annotation.Bean;
 11 import org.springframework.context.annotation.Configuration;
 12 import org.springframework.context.annotation.Primary;
 13 
 14 import com.alibaba.druid.pool.DruidDataSource;
 15 import com.alibaba.druid.support.http.StatViewServlet;
 16 import com.alibaba.druid.support.http.WebStatFilter;
 17 
 18 @Configuration
 19 public class DruidConfig {
 20 
 21 private Logger logger = LoggerFactory.getLogger(getClass());
 22 
 23 @Value("${spring.datasource.url}")
 24 private String dbUrl;
 25 
 26 @Value("${spring.datasource.username}")
 27 private String username;
 28 
 29 @Value("${spring.datasource.password}")
 30 private String password;
 31 
 32 @Value("${spring.datasource.driver-class-name}")
 33 private String driverClassName;
 34 
 35 @Value("${spring.datasource.initialSize}")
 36 private int initialSize;
 37 
 38 @Value("${spring.datasource.minIdle}")
 39 private int minIdle;
 40 
 41 @Value("${spring.datasource.maxActive}")
 42 private int maxActive;
 43 
 44 @Value("${spring.datasource.maxWait}")
 45 private int maxWait;
 46 
 47 @Value("${spring.datasource.timeBetweenEvictionRunsMillis}")
 48 private int timeBetweenEvictionRunsMillis;
 49 
 50 @Value("${spring.datasource.minEvictableIdleTimeMillis}")
 51 private int minEvictableIdleTimeMillis;
 52 
 53 @Value("${spring.datasource.validationQuery}")
 54 private String validationQuery;
 55 
 56 @Value("${spring.datasource.testWhileIdle}")
 57 private boolean testWhileIdle;
 58 
 59 @Value("${spring.datasource.testOnBorrow}")
 60 private boolean testOnBorrow;
 61 
 62 @Value("${spring.datasource.testOnReturn}")
 63 private boolean testOnReturn;
 64 
 65 @Value("${spring.datasource.poolPreparedStatements}")
 66 private boolean poolPreparedStatements;
 67 
 68 @Value("${spring.datasource.filters}")
 69 private String filters;
 70 
 71 @Bean
 72 public ServletRegistrationBean druidServlet() {
 73 ServletRegistrationBean reg = new ServletRegistrationBean();
 74 reg.setServlet(new StatViewServlet());
 75 reg.addUrlMappings("/druid/*");
 76 reg.addInitParameter("loginUsername", "druid");
 77 reg.addInitParameter("loginPassword", "jiajian123456");
 78 return reg;
 79 }
 80 
 81 @Bean
 82 public FilterRegistrationBean filterRegistrationBean() {
 83 FilterRegistrationBean filterRegistrationBean = new FilterRegistrationBean();
 84 filterRegistrationBean.setFilter(new WebStatFilter());
 85 filterRegistrationBean.addUrlPatterns("/*");
 86 filterRegistrationBean.addInitParameter("exclusions", "*.js,*.gif,*.jpg,*.png,*.css,*.ico,/druid/*");
 87 filterRegistrationBean.addInitParameter("profileEnable", "true");
 88 filterRegistrationBean.addInitParameter("principalCookieName", "USER_COOKIE");
 89 filterRegistrationBean.addInitParameter("principalSessionName", "USER_SESSION");
 90 return filterRegistrationBean;
 91 }
 92 
 93 @Primary //默认数据源
 94 @Bean(name = "dataSource",destroyMethod = "close")
 95 public DataSource druidDataSource(){ 
 96 DruidDataSource datasource = new DruidDataSource(); 
 97 
 98 datasource.setUrl(this.dbUrl); 
 99 datasource.setUsername(username); 
100 datasource.setPassword(password); 
101 datasource.setDriverClassName(driverClassName); 
102 datasource.setInitialSize(initialSize); 
103 datasource.setMinIdle(minIdle); 
104 datasource.setMaxActive(maxActive); 
105 datasource.setMaxWait(maxWait); 
106 datasource.setTimeBetweenEvictionRunsMillis(timeBetweenEvictionRunsMillis); 
107 datasource.setMinEvictableIdleTimeMillis(minEvictableIdleTimeMillis); 
108 datasource.setValidationQuery(validationQuery); 
109 datasource.setTestWhileIdle(testWhileIdle); 
110 datasource.setTestOnBorrow(testOnBorrow); 
111 datasource.setTestOnReturn(testOnReturn); 
112 datasource.setPoolPreparedStatements(poolPreparedStatements); 
113 try { 
114   datasource.setFilters(filters); 
115 } catch (SQLException e) { 
116   logger.error("druid configuration initialization filter", e); 
117 } 
118   return datasource; 
119 }
120 }

 

4,集成myBatis

  1 import javax.annotation.Resource;
  2 import javax.sql.DataSource;
  3 
  4 import org.apache.ibatis.session.SqlSessionFactory;
  5 import org.mybatis.spring.SqlSessionFactoryBean;
  6 import org.mybatis.spring.SqlSessionTemplate;
  7 import org.springframework.context.annotation.Bean;
  8 import org.springframework.context.annotation.Configuration;
  9 import org.springframework.core.io.support.PathMatchingResourcePatternResolver;
 10 import org.springframework.jdbc.datasource.DataSourceTransactionManager;
 11 import org.springframework.transaction.PlatformTransactionManager;
 12 import org.springframework.transaction.annotation.EnableTransactionManagement;
 13 import org.springframework.transaction.annotation.TransactionManagementConfigurer;
 14 
 15 /**
 16 * @Description 集成myBatis
 17 * @author aisino-xxy
 18 * @date 2017年11月15日 下午7:50:21
 19 */
 20 @Configuration
 21 @EnableTransactionManagement
 22 public class SessionFactoryConfig implements TransactionManagementConfigurer{
 23 /** * mybatis 配置路径 */ 
 24 private static final String MYBATIS_CONFIG = "classpath:/mybatis/*.xml";
 25 /** * model 配置路径 */ 
 26 private static final String TYPE_ALIAS_PACKAGE = "com.aisino.projects.task.model";
 27 
 28 @Resource(name = "dataSource")
 29 private DataSource dataSource;
 30 
 31 /** 
 32 *创建sqlSessionFactoryBean 实例
 33 * 并且设置configtion 如驼峰命名.等等
 34 * 设置mapper 映射路径 
 35 * 设置datasource数据源 
 36 * @return 
 37 * @throws Exception 
 38 */
 39 @Bean(name = "sqlSessionFactory") 
 40 public SqlSessionFactoryBean createSqlSessionFactoryBean() throws Exception {
 41 SqlSessionFactoryBean sqlSessionFactoryBean = new SqlSessionFactoryBean(); 
 42 /** 设置datasource */ 
 43 sqlSessionFactoryBean.setDataSource(dataSource); 
 44 /** 设置typeAlias 包扫描路径 */
 45 sqlSessionFactoryBean.setTypeAliasesPackage(TYPE_ALIAS_PACKAGE);
 46 
 47 PathMatchingResourcePatternResolver resolver = new PathMatchingResourcePatternResolver();
 48 /** 设置mybatis configuration 扫描路径 */
 49 sqlSessionFactoryBean.setMapperLocations(resolver.getResources(MYBATIS_CONFIG));
 50 return sqlSessionFactoryBean;
 51 }
 52 
 53 
 54 /**
 55 * 用于实际查询的sql工具,传统dao开发形式可以使用这个,基于mapper代理则不需要注入
 56 * @param sqlSessionFactory
 57 * @return
 58 */
 59 @Bean
 60 public SqlSessionTemplate sqlSessionTemplate(SqlSessionFactory sqlSessionFactory) {
 61 return new SqlSessionTemplate(sqlSessionFactory);
 62 }
 63 
 64 
 65 /**
 66 * 事务管理,具体使用在service层加入@Transactional注解
 67 */
 68 @Bean
 69 @Override
 70 public PlatformTransactionManager annotationDrivenTransactionManager() {
 71 return new DataSourceTransactionManager(dataSource);
 72 }
 73 }
 74 
 75 5,扫描MyBatis的Mapper接口
 76 
 77 import org.mybatis.spring.mapper.MapperScannerConfigurer;
 78 import org.springframework.boot.autoconfigure.AutoConfigureAfter;
 79 import org.springframework.context.annotation.Bean;
 80 import org.springframework.context.annotation.Configuration;
 81 
 82 /**
 83 * @Description 扫描MyBatis的Mapper接口
 84 * @author aisino-xxy
 85 * @date 2017年11月15日 下午7:51:23
 86 */
 87 @Configuration
 88 //TODO 注意,由于MapperScannerConfigurer执行的比较早,所以必须有下面的注解
 89 @AutoConfigureAfter(SessionFactoryConfig.class)
 90 public class MyBatisMapperScannerConfig {
 91 
 92 /**Mapper接口路径*/
 93 private static final String BASE_PACKAGE = "com.aisino.projects.task.mapper";
 94 
 95 @Bean
 96 public MapperScannerConfigurer mapperScannerConfigurer() {
 97 MapperScannerConfigurer mapperScannerConfigurer = new MapperScannerConfigurer();
 98 mapperScannerConfigurer.setSqlSessionFactoryBeanName("sqlSessionFactory");
 99 mapperScannerConfigurer.setBasePackage(BASE_PACKAGE);
100 return mapperScannerConfigurer;
101 }
102 
103 }

 

最后启动项目

 

posted @ 2017-11-15 20:46  江湖小谢*VIP  阅读(270)  评论(0编辑  收藏  举报