Mybatis学习总结(七).Mybatis插件之分页插件
2017-02-12 14:23
429 查看
Mybatis的plugin实现原理
下图黑色部分为之前方式,红色部分为使用插件后实现通用分页组件
如果想要将现有的select语句改为支持分页功能的查询语句该怎么做呢?最简单的一种做法就是将所有的select语句都加上limit来实现分页,这种做法有什么问题呢?1、要改动的地方非常多,而且每个sql改动逻辑基本上一致;
2、DAO层的查询逻辑要改动,要在原来查询之后执行查询 SELECT count(1) from ….. 查询数据总条数。
有没有一种简便方法实现呢?
Mybatis提供了plugin机制,允许我们在Mybatis的原有处理流程上加入自己逻辑,所有我们就可以使用这种逻辑加上我们的分页逻辑,也就是实现拦截器。
Mybatis支持的拦截的接口有4个,Executor、ParameterHandler、ResultSetHandler、StatementHandler。
使用PageHelper实现分页
PageHelper实现了通用的分页查询,其支持的数据有,mysql、Oracle、DB2、PostgreSQL等主流的数据库。该插件托管于github: https://github.com/pagehelper/Mybatis-PageHelper
参考《 Mybatis分页插件 - PageHelper.docx 》
①.导入依赖
<dependency> <groupId>com.github.pagehelper</groupId> <artifactId>pagehelper</artifactId> <version>3.4.2</version> </dependency> <dependency> <groupId>com.github.jsqlparser</groupId> <artifactId>jsqlparser</artifactId> <version>0.9.1</version> </dependency>
②.在全局配置文件中配置插件
<plugins> <!-- com.github.pagehelper为PageHelper类所在包名 --> <plugin interceptor="com.github.pagehelper.PageHelper"> <!-- 方言 --> <property name="dialect" value="mysql"/> <!-- 该参数默认为false --> <!-- 设置为true时,使用RowBounds分页会进行count查询 --> <property name="rowBoundsWithCount" value="true"/> </plugin> </plugins>
③.编写接口
public List<User> queryUserListLikeName(@Param("name") String name);
④.编写映射文件
<select id="queryUserListLikeName" parameterType="String" resultType="User"> SELECT <include refid="my.common.userColumns"/> FROM tb_user WHERE name LIKE '%${name}%' </select>
⑤.测试分页
@Test public void testQueryUserListLikeName() { //设置分页条件,Parameters:pageNum 页码pageSize 每页显示数量count 是否进行count查询 PageHelper.startPage(1, 3, true); List<User> users = this.userMapper.queryUserListLikeName(null); for (User user : users) { System.out.println(user); } }
结果:
可以使用PageInfo 查看分页信息
@Test public void testQueryUserListLikeName() { //设置分页条件,Parameters:pageNum 页码pageSize 每页显示数量count 是否进行count查询 PageHelper.startPage(1, 3, true); List<User> users = this.userMapper.queryUserListLikeName(null); PageInfo<User> pageInfo = new PageInfo<User>(users); //打印分页信息 System.out.println("数据总数:" + pageInfo.getTotal()); System.out.println("数据总页数:" + pageInfo.getPages()); System.out.println("最后一页:" + pageInfo.getLastPage()); for (User user : pageInfo.getList()) { System.out.println(user); } }
PageInfo的方法
Mybatis批量增删改
批量删除
批量增加
批量修改
相关文章推荐
- MyBatis学习总结(17)——Mybatis分页插件PageHelper
- MyBatis学习总结(17)——Mybatis分页插件PageHelper
- MyBatis学习总结_17_Mybatis分页插件PageHelper
- MyBatis学习总结(17)——Mybatis分页插件PageHelper
- MyBatis学习总结(15)——定制Mybatis自动代码生成的maven插件
- 使用abel533大神的mybatis分页插件总结
- Mybatis学习 PageHelper分页插件
- 使用mybatis分页插件PageHelper5.0.0遇到的问题总结
- MyBatis学习总结_15_定制Mybatis自动代码生成的maven插件
- SpringBoot学习笔记之mybatis分页插件集成
- MyBatis学习总结(15)——定制Mybatis自动代码生成的maven插件
- 使用mybatis分页插件PageHelper5.0.0遇到的问题总结
- MyBatis学习总结(21)——自定义MyBatis Generator插件
- mybatis的分页插件pagehelper-fix使用、数据库分页查询模板sql、总结mysql与oracle语句的区别
- Mybatis学习(4):Mybatis及PageHelper插件和easyUI实现分页
- MyBatis学习总结(15)——定制Mybatis自动代码生成的maven插件
- 使用mybatis分页插件PageHelper5.0.0遇到的问题总结
- Eclipse插件开发---学习总结
- MyBatis学习总结一 —— MyBatis的使用步骤及配置
- Extjs学习总结之12使用ComboBox实现分页