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 }
最后启动项目