上篇文章咱们介绍了SpringBoot和MyBatis的整合,能够说很是简单快捷的就搭建了一个web项目,可是在一个真正的企业级项目中,可能咱们还须要更多的更加完善的框架才能开始真正的开发,好比链接池、分页插件等。下面咱们就来看看在SpringBoot中怎么快速的集成这些东西。java
1、新建一个项目,引入相关依赖,加粗的是本项目中新引入的依赖mysql
<!-- 单元测试依赖 start --> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-test</artifactId> </dependency> <!-- 单元测试依赖 end --> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> <dependency> <groupId>org.mybatis.spring.boot</groupId> <artifactId>mybatis-spring-boot-starter</artifactId> <version>1.3.1</version> </dependency> <!-- 数据库链接池 start --> <dependency> <groupId>com.alibaba</groupId> <artifactId>druid</artifactId> <version>1.1.8</version> </dependency> <!-- 数据库链接池 end --> <!-- mysql链接 start --> <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> </dependency> <!-- mysql链接 end --> <!-- pagehelper分页 start --> <dependency> <groupId>com.github.pagehelper</groupId> <artifactId>pagehelper</artifactId> <version>5.1.2</version> </dependency> <!-- pagehelper分页 start -->
2、为了项目配置的整洁性,在SpringBoot-mybatis的项目基础上,我将数据库和MyBatis的相关操做进行了统一配置,使得配置根据清晰简单,项目结构以下git
后期项目会将全部的配置放在configuration包下,具体数据库配置以下github
@Configuration @MapperScan(value = "com.somta.springboot.dao") public class MyBatisConfiguration { @Value("${spring.datasource.driver-class-name}") private String driverClassName; @Value("${spring.datasource.url}") private String url; @Value("${spring.datasource.username}") private String username; @Value("${spring.datasource.password}") private String password; @Bean public DruidDataSource dataSource() { DruidDataSource dataSource = new DruidDataSource(); dataSource.setDriverClassName(this.driverClassName); dataSource.setUrl(this.url); dataSource.setUsername(this.username); dataSource.setPassword(this.password); dataSource.setInitialSize(5); dataSource.setMaxActive(30); dataSource.setMinIdle(5); dataSource.setMaxWait(60000); return dataSource; } @Bean(name="sqlSessionFactory") public SqlSessionFactoryBean sqlSessionFactory(DataSource dataSource) throws IOException { SqlSessionFactoryBean sqlSessionFactoryBean = new SqlSessionFactoryBean(); sqlSessionFactoryBean.setDataSource(dataSource); sqlSessionFactoryBean.setConfigLocation(new ClassPathResource("mybatis-config.xml")); sqlSessionFactoryBean.setMapperLocations(new PathMatchingResourcePatternResolver().getResources("classpath*:mybatis/**/Mysql_*Mapper.xml")); return sqlSessionFactoryBean; } }
一、将Dao层扫描和MyBatis文件的扫描统一放在配置文件中web
二、使用了阿里开源的Druid链接池,SpringBoot默认使用的链接池是Hikari,二者之间的优缺点后续将会单独介绍,配置成功后启动项目,咱们能够看到项目当前使用的是那种链接池,以下图:spring
三、在src/main/resources下面新增了一个mybatis-config文件,该文件配置了MyBatis与数据库的相关信息,和PageHelper的相关配置,注意:(在不一样的PageHelper版本中PageHelper的拦截器发生了变化,PageHelper-4.1.1中使用的是com.github.pagehelper.PageHelper,在PageHelper-5.1.2中使用的拦截器是com.github.pagehelper.PageInterceptor,具体小版本以官网公告为准)sql
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE configuration PUBLIC "-//mybatis.org//DTD Config 3.0//EN" "http://mybatis.org/dtd/mybatis-3-config.dtd"> <configuration> <properties> <property name="dialect" value="mysql"/> </properties> <settings> <!-- 这个配置使全局的映射器启用或禁用缓存。系统默认值是true --> <setting name="cacheEnabled" value="true"/> <!-- 全局启用或禁用延迟加载。当禁用时,全部关联对象都会即时加载。 系统默认值是true --> <setting name="lazyLoadingEnabled" value="true"/> <!-- 容许或不容许多种结果集从一个单独的语句中返回(须要适合的驱动)。 系统默认值是true --> <setting name="multipleResultSetsEnabled" value="true"/> <!--使用列标签代替列名。不一样的驱动在这方便表现不一样。参考驱动文档或充分测试两种方法来决定所使用的驱动。 系统默认值是true --> <setting name="useColumnLabel" value="true"/> <!--容许 JDBC 支持生成的键。须要适合的驱动。若是设置为 true 则这个设置强制生成的键被使用,尽管一些驱动拒绝兼容但仍然有效(好比 Derby)。 系统默认值是false --> <setting name="useGeneratedKeys" value="false"/> <!--配置默认的执行器。SIMPLE 执行器没有什么特别之处。REUSE 执行器重用预处理语句。BATCH 执行器重用语句和批量更新 系统默认值是SIMPLE --> <setting name="defaultExecutorType" value="SIMPLE"/> <!--设置超时时间,它决定驱动等待一个数据库响应的时间。 系统默认值是null --> <setting name="defaultStatementTimeout" value="25000"/> <!--设置字段和类是否支持驼峰命名的属性。 系统默认值是false --> <setting name="mapUnderscoreToCamelCase" value="true"/> <!-- 打印查询语句 --> <!-- <setting name="logImpl" value="STDOUT_LOGGING" /> --> </settings> <plugins> <plugin interceptor="com.github.pagehelper.PageInterceptor"> <!-- 该参数默认为false --> <!-- 设置为true时,会将RowBounds第一个参数offset当成pageNum页码使用 --> <!-- 和startPage中的pageNum效果同样--> <property name="offsetAsPageNum" value="true"/> <!-- 该参数默认为false --> <!-- 设置为true时,使用RowBounds分页会进行count查询 --> <property name="rowBoundsWithCount" value="true"/> <!-- 设置为true时,若是pageSize=0或者RowBounds.limit = 0就会查询出所有的结果 --> <!-- (至关于没有执行分页查询,可是返回结果仍然是Page类型)--> <property name="pageSizeZero" value="true"/> <!-- 3.3.0版本可用 - 分页参数合理化,默认false禁用 --> <!-- 启用合理化时,若是pageNum<1会查询第一页,若是pageNum>pages会查询最后一页 --> <!-- 禁用合理化时,若是pageNum<1或pageNum>pages会返回空数据 --> <property name="reasonable" value="false"/> <!-- 支持经过Mapper接口参数来传递分页参数 --> <property name="supportMethodsArguments" value="false"/> <!-- always老是返回PageInfo类型,check检查返回类型是否为PageInfo,none返回Page --> <property name="returnPageInfo" value="none"/> </plugin> </plugins> </configuration>
3、PageHelper的使用方法数据库
PageHelper.startPage(pageNum, pageSize)只做用离它最近的一个查询,更多与分页相关的信息咱们均可以在page对象中拿到,彻底能够知足各类状况下的分页查询。缓存
@Test public void testQueryUserList() throws Exception { int pageNum=1; int pageSize=10; Page<User> page = PageHelper.startPage(pageNum, pageSize); userDao.queryUserList(); System.out.println("总共条数:"+page.getTotal()); for (User user : page.getResult()) { System.out.println(user.getName()); } }
看到如图所示的输出表示分页插件配置成功了springboot
Git代码地址:https://gitee.com/Somta/Sprin...
原文地址:http://somta.com.cn/#/blog/vi...
本文由明天的地平线创做,如想了解更多更详细的内容,请关注一下公众号,公众号内将进行最新最实时的更新!