一,使用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&characterEncoding=utf8&allowMultiQueries=true&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); } }
至此,集成完毕。