上篇文章我们介绍了SpringBoot和MyBatis的整合,可以说非常简单快捷的就搭建了一个web项目,但是在一个真正的企业级项目中,可能我们还需要更多的更加完善的框架才能开始真正的开发,比如连接池、分页插件等。下面我们就来看看在SpringBoot中怎么快速的集成这些东西。

一、新建一个项目,引入相关依赖,加粗的是本项目中新引入的依赖

<!-- 单元测试依赖 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 -->

二、为了项目配置的整洁性,在SpringBoot-mybatis的项目基础上,我将数据库和MyBatis的相关操作进行了统一配置,使得配置根据清晰简单,项目结构如下

后期项目会将所有的配置放在configuration包下,具体数据库配置如下

@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;
    }
}

1、将Dao层扫描和MyBatis文件的扫描统一放在配置文件中,如上文中的加粗项

2、使用了阿里开源的Druid连接池,SpringBoot默认使用的连接池是Hikari,两者之间的优缺点后续将会单独介绍,配置成功后启动项目,我们可以看到项目当前使用的是那种连接池,如下图:

3、在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,具体小版本以官网公告为准)

<?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>

三、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());
}

}

看到如图所示的输出表示分页插件配置成功了

Git代码地址:https://gitee.com/Somta/SpringBoot/tree/master/SpringBoot-mybatis-expand

原文地址:http://somta.com.cn/#/blog/view/ef507e4e6e28434d9787ec715d406491
---------------------
作者:明天的地平线
来源:CSDN
原文:https://blog.csdn.net/husong_/article/details/79923753
版权声明:本文为博主原创文章,转载请附上博文链接!

转载于:https://www.cnblogs.com/telwanggs/p/10791883.html

SpringBoot2.0之五 优雅整合SpringBoot2.0+MyBatis+druid+PageHelper相关推荐

  1. druid 多数据源_SpringBoot+Mybatis+Druid+PageHelper 实现多数据源并分页

    今天跟大家分享常用的SpringBoot+Mybatis+ Druid+PageHelper 实现多数据源并分页的知识. 1 SpringBoot+Mybatis+ Druid+PageHelper ...

  2. SpringBoot + Mybatis + Druid + PageHelper 实现多数据源并分页

    点击关注公众号,Java干货及时送达 本篇文章主要讲述的是SpringBoot整合Mybatis.Druid和PageHelper 并实现多数据源和分页.其中SpringBoot整合Mybatis这块 ...

  3. Spring Boot + MyBatis + Druid + PageHelper 实现多数据源并分页

    点击上方"方志朋",选择"设为星标" 回复"666"获取新整理的面试资料 作者 | 虚无境 链接 | cnblogs.com/xuwujin ...

  4. SpringBoot+Mybatis+ Druid+PageHelper 实现多数据源并分页

    点击上方"方志朋",选择"设为星标" 回复"666"获取新整理的面试资料 作者: 虚无境 cnblogs.com/xuwujing/p/89 ...

  5. SpringBoot + Mybatis + Druid + PageHelper 实现多数据源分页

    点击上方蓝色"程序猿DD",选择"设为星标" 回复"资源"获取独家整理的学习资料! 作者 | 虚无境的博客 来源 | http://8rr. ...

  6. druid 多数据源_SpringBoot+Mybatis+ Druid+PageHelper 实现多数据源并分页

    作者: 虚无境http://cnblogs.com/xuwujing/p/8964927.html 前言 本篇文章主要讲述的是SpringBoot整合Mybatis.Druid和PageHelper ...

  7. SpringBoot2.0之三 优雅整合Spring Data JPA

      在我们的实际开发的过程中,无论多复杂的业务逻辑到达持久层都回归到了"增删改查"的基本操作,可能会存在关联多张表的复杂sql,但是对于单表的"增删改查"也是不 ...

  8. 【Spring boot】IDEA + Maven + Spring Boot + Mybatis + Druid + PageHelper

    在第一篇Spring Boot 框架搭建博客中,底层用的是jpa,这篇博客底层选择的mybatis,之前搭建过Spring Boot + Mybatis的框架,用的是Spring Boot 1.5.9 ...

  9. 基于 SpringBoot2.0+优雅整合 SpringBoot+Mybatis

    SpringBoot 整合 Mybatis 有两种常用的方式,一种就是我们常见的 xml 的方式 ,还有一种是全注解的方式.我觉得这两者没有谁比谁好,在 SQL 语句不太长的情况下,我觉得全注解的方式 ...

最新文章

  1. Python源码学习:多线程实现机制
  2. 为什么百万医疗险越来越多,到底选哪款?
  3. XtraGrid RepositoryItemCheckEdit 显示状态以及单选多选问题
  4. 时间序列研(part10)--误差修正模型
  5. 程序员难以攻克的十大难题
  6. 产品经理思维模型:产品生命周期
  7. python安装caffe_Linux下caffe的安装
  8. java map 为空_java中如何判断map是否为空
  9. Illustrator 教程,如何在 Illustrator 中创建及应用图案?
  10. 数据库优化实践【信息跟踪篇】
  11. 通过降低CPU频率 达到降低功耗的目的
  12. 华为mate40鸿蒙系统用久了会卡吗,华为mate40用多久会卡_华为mate40能流畅使用多久...
  13. 优雅代码之巧用 Ramda
  14. 服务器获取请求ip地址
  15. 国家密码管理局公告——密码行业标准更新26项
  16. 春意盎然、万物复苏、朝气蓬勃~
  17. lm3s811 学习笔记(三)【uart】
  18. wpf 三种 loading 样式
  19. Android 开发:(十四)NavigationBar篇-自定义顶部导航栏
  20. 【整理】SSD的TRIM指令作用与GC关系

热门文章

  1. html5拖拽换位效果演示,HTML5拖拽(二)--dataTransfer
  2. linux进程和线程理解
  3. (84)FPGA面试题-多bit跨时钟域
  4. c语言中index函数,MATCH+INDEX函数详解
  5. python 直线过滤掉不在边缘上的点_不存在所谓的机器学习平台
  6. linux内核五大部分,Linux内核的五大模块
  7. Linux内核网络协议栈1- socket文件系统注册
  8. 发一个多CPU中进程与CPU绑定的例子
  9. mini2440驱动分析之ADC
  10. proc_fs文件的操作