zoukankan      html  css  js  c++  java
  • 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 }

    最后启动项目

  • 相关阅读:
    CF431E Chemistry Experiment
    BZOJ 4173: 数学
    BZOJ 2426: [HAOI2010]工厂选址
    BZOJ 2580: [Usaco2012 Jan]Video Game
    BZOJ 4237: 稻草人
    BZOJ 2434: [Noi2011]阿狸的打字机
    BZOJ 3881: [Coci2015]Divljak
    BZOJ 2754: [SCOI2012]喵星球上的点名
    BZOJ 1009: [HNOI2008]GT考试
    BZOJ 3731: Gty的超级妹子树
  • 原文地址:https://www.cnblogs.com/xiexy/p/7840879.html
Copyright © 2011-2022 走看看