连接池、分页

  • 集成 druid 连接池
    • 读取外部的配置文件
  • 分页查询 - PageHelper
    • PageHelper 环境配置
    • PageHelper 使用方法

Java 从 0 到架构师目录:【Java从0到架构师】学习记录

集成 druid 连接池

添加 maven 依赖:

<dependency><groupId>com.alibaba</groupId><artifactId>druid</artifactId><version>1.1.22</version>
</dependency>

新建一个继承 UnpooledDataSourceFactory 的连接池类,在构造方法中设置数据源:

public class DruidDataSourceFactory extends UnpooledDataSourceFactory {public DruidDataSourceFactory() {this.dataSource = new DruidDataSource();}
}

在 environment 标签中配置连接池的类名:

<dataSource type="com.mj.common.DruidDataSourceFactory"><property name="driver" value="com.mysql.jdbc.Driver"/><property name="url" value="jdbc:mysql://localhost:3306/xr2"/><property name="username" value="root"/><property name="password" value="root"/>
</dataSource>

可以给数据库连接池配置别名:

<typeAliases><!-- 一旦设置了别名,它是不区分大小写的 --><typeAlias type="com.mj.common.DruidDataSourceFactory" alias="druid" />
</typeAliases>
<!-- 别名不区分大小写 -->
<dataSource type="DRUID"><!-- .... -->
</dataSource>

读取外部的配置文件



将 druid.properties 放在 resources 下

在 mybatis-config.xml 中读取配置文件:

<properties resource="druid.properties" />

利用 ${} 的语法从 druid.properties 文件中取值:

<dataSource type="com.mj.common.DruidDataSourceFactor"><property name="driverClass" value="${dev.driverClass}"/><property name="url" value="${dev.url}"/><property name="username" value="${dev.username}"/><property name="password" value="${dev.password}"/><property name="initialSize" value="${dev.initialSize}"/><property name="maxActive" value="${dev.maxActive}"/><property name="maxWait" value="${dev.maxWait}"/>
</dataSource>

分页查询 - PageHelper

不同数据库的分页查询 SQL 可能是不一样的,比如:每页 10 条数据,查询第 2 页(第 11 ~ 20 条记录)

MySQL 实现:

SELECT * FROM student LIMIT 10, 10;

SQL Server 实现:

SELECT * FROM student
OFFSET 10 ROWS FETCH NEXT 10 ROWS ONLY;

Oracle 实现:

SELECT * FROM(SELECT s.*, ROWNUM rnFROM (SELECT * FROM student) sWHERE ROWNUM <= 20)
WHERE rn >= 11;

所以,在 MyBatis 中使用不同的数据库,就需要编写不同的分页查询 SQL


PageHelper 是由国人开发的 MyBatis 分页插件

  • 支持多种常用的数据库,可以极大简化分页的业务逻辑

源码:https://github.com/pagehelper/Mybatis-PageHelper

使用方法:https://github.com/pagehelper/Mybatis-PageHelper/blob/master/wikis/zh/HowToUse.md

PageHelper 环境配置

引入 maven 依赖:

<dependency><groupId>com.github.pagehelper</groupId><artifactId>pagehelper</artifactId><version>5.2.0</version>
</dependency>

在 mybatis-config.xml 中配置插件:

注意:mybatis-config.xml 中标签的书写是有顺序的,可以利用先随便写个位置,然后查看报错信息

<plugins><!-- PageHelper会去拦截MyBatis的SQL, 并重组成分页查询的SQL语句 --><plugin interceptor="com.github.pagehelper.PageInterceptor"><!-- reasonable设置为true代表分页合理化: pageNum <= 0 就会自动获取第1页 pageNum > pages 就会自动获取最后1页 --><property name="reasonable" value="true"/></plugin>
</plugins>

reasonable 设置为 true:

  • pageNum < = 0 时会查询第一页
  • pageNum > pages(超过总页数时),会查询最后一页

PageHelper 使用方法

<select id="list" resultType="com.mj.bean.Skill">SELECT * FROM skill
</select>

Java 代码中设置分页参数,再进行查询:

// 设置分页参数(第2页,每页5条记录)
PageHelper.startPage(2, 5);
// 查询
List<Skill> skills = session.selectList("skill.list");

【Java从0到架构师】MyBatis - 连接池、分页_PageHelper相关推荐

  1. 【Java从0到架构师】Spring - 整合 MyBatis

    整合 MyBatis 整合 MyBatis - 依赖 整合 MyBatis - 数据源 整合 MyBatis - SqlSessionFactoryBean 整合 MyBatis - MapperSc ...

  2. 【Java从0到架构师】MyBatis - 查询

    MyBatis - 查询 数据库事务 (Database Transaction) MyBatis 使用准备 依赖 配置文件 创建 Session MyBatis 查询 实体映射 字段映射 - res ...

  3. 【Java从0到架构师】SpringBoot - MyBatis

    SpringBoot - MyBatis 集成 MyBatis 引入依赖 数据源配置 - 源码 MyBatis 配置 - 源码 扫描 Dao MyBatis 主配置 - XML.注解.applicat ...

  4. 【Java从0到架构师】MyBatis - 缓存_构造方法

    缓存_构造方法 缓存 一级缓存 - SqlSession 二级缓存 开启二级缓存 useCache - 是否开启二级缓存 flushCache - 是否需要清楚缓存 指定构造方法 XML 中指定构造方 ...

  5. 【Java从0到架构师】MyBatis - dao

    dao 使用 MyBatis 实现 dao 层的几种方式 自定义实现类,XML 实现 dao 层 只定义接口类,getMapper + XML 实现 dao 层 只定义接口类,getMapper + ...

  6. 【Java从0到架构师】MyBatis - 增删改、动态 SQL

    MyBatis - 增删改.动态 SQL 动态 SQL if 标签 where 标签 sql 标签 foreach 标签 添加 主键设置 批量添加 - 利用 foreach 标签 更新 删除 批量删除 ...

  7. 【Java从0到架构师】MyBatis - 多表查询_延迟加载

    多表查询_延迟加载 多表关系 一对一 association 标签 + JOIN 实现一对一 一对多 \ 多对一 collection 标签 + LEFT JOIN 实现一对多 多对多 多对多的本质: ...

  8. 【Java从0到架构师(1),Java中高级面试题总结(全面)

    JSP 九大内置对象 MySQL 基础 + 多表查询 [Java从0到架构师]MySQL 基础 MySQL MySQL 的使用步骤 数据库的内部存储细节 GUI 工具 SQL 语句 DDL 语句 DD ...

  9. 【Java从0到架构师】SpringCloud - Hystrix、Zuul

    SpringCloud 基本概念 熔断和降级 服务雪崩效应 服务熔断与降级 - Hystrix SpringBoot 集成 Hystrix 熔断降级服务异常报警通知 重点属性 - 熔断隔离策略.超时时 ...

最新文章

  1. 论文被拒,项目被砍?斯坦福「最惨」在读博士教你如何直面失败
  2. 怎么检测不到我的音频_检测不到硬盘怎么办?
  3. opengl地球贴纹理_一文看懂材质/纹理 Material, Texture, Shading, Shader 的区别
  4. react-native填坑--react-navigation
  5. linux中tree命令
  6. python webui测试ie浏览器环境配置_python+selenium做ui自动化测试用法必会
  7. __builtin_expect提高运行效率
  8. php动态柱形图,php生成柱状图(统计图)程序
  9. python执行方式及变量
  10. 0514JS函数练习
  11. C/C++中类型变量转换之间的数值溢出
  12. 怎么在计算机上设置复印机双面打印,Word如何设置双面打印
  13. Kali渗透-MSF木马免杀技术
  14. Android音频压缩方法
  15. 用3DMAX制作《滚动的小球》
  16. VS2019打包exe文件
  17. 将iPhone的通讯录以拼音排序(转载文章)
  18. 4、数据库逻辑结构设计阶段
  19. 瑞能微计量芯片RN2026的实用程序
  20. MQTT协议与阿里云IoT物联网平台

热门文章

  1. 专为人工智能和数据科学而生的Go语言,或将取代Python
  2. 为什么华为手机升级配置时大家就买账,苹果明明有创新点却被喷平庸令人失望?
  3. Qt4_坐标系统变换
  4. activiti 功能概述_子串功能概述
  5. power bi 创建空表_使用Power BI创建足球热图
  6. sql broker_使用SQL Server Service Broker进行异步处理
  7. sql安装弹出sqlcmd_SQL Server中SQLCMD实用工具概述
  8. sleep与wait的区别? 以及wait(long timeout)中timeout的含义
  9. PHP+sqlsrv的分页实现
  10. BZOJ 3668: [Noi2014]起床困难综合症【二进制+贪心】