Mybatis分页插件 - 示例

简介:

Mybatis极其(最)简(好)单(用)的一个分页插件

http://blog.csdn.net/isea533/article/details/23831273


这里说最好用,绝对不是吹的,不过有好多人都不理解为什么要用这个插件,自己手写分页sql不是挺好吗......


所以我特地写这样一个例子来讲为什么最好用。


假设我们已经写好了Mapper的接口和xml,如下:

[java]  view plain  copy
  在CODE上查看代码片 派生到我的代码片
  1. public interface SysLoginLogMapper {  
  2.     /** 
  3.      * 根据查询条件查询登录日志 
  4.      * @param logip 
  5.      * @param username 
  6.      * @param loginDate 
  7.      * @param exitDate 
  8.      * @return 
  9.      */  
  10.     List<SysLoginLog> findSysLoginLog(@Param("logip") String logip,  
  11.                                       @Param("username") String username,  
  12.                                       @Param("loginDate") String loginDate,  
  13.                                       @Param("exitDate") String exitDate,  
  14.                                       @Param("logerr") String logerr);  
  15.   
  16. }  

[html]  view plain  copy
  在CODE上查看代码片 派生到我的代码片
  1. <?xml version="1.0" encoding="UTF-8" ?>  
  2. <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd" >  
  3. <mapper namespace="com.easternie.sys.dao.SysLoginLogMapper">  
  4.   <select id="findSysLoginLog" resultType="com.easternie.sys.vo.model.SysLoginLog">  
  5.     select * from sys_login_log a  
  6.     <if test="username != null and username != ''">  
  7.       left join sys_user b on a.userid = b.userid  
  8.     </if>  
  9.     <where>  
  10.       <if test="logip!=null and logip != ''">  
  11.         a.logip like '%'||#{logip}||'%'  
  12.       </if>  
  13.       <if test="username != null and username != ''">  
  14.         and (b.username like '%'||#{username}||'%' or b.realname like '%'||#{username}||'%')  
  15.       </if>  
  16.       <if test="loginDate!=null and loginDate!=''">  
  17.         and to_date(substr(a.logindate,0,10),'yyyy-MM-dd') = to_date(#{loginDate},'yyyy-MM-dd')  
  18.       </if>  
  19.       <if test="exitDate!=null and exitDate!=''">  
  20.         and to_date(substr(a.EXITDATE,0,10),'yyyy-MM-dd') = to_date(#{exitDate},'yyyy-MM-dd')  
  21.       </if>  
  22.       <if test="logerr!=null and logerr!=''">  
  23.         and a.logerr like '%'||#{logerr}||'%'  
  24.       </if>  
  25.     </where>  
  26.     order by logid desc  
  27.   </select>  
  28. </mapper>  

虽然是举个简单例子,但是这里的xml并没那么简单。


如果你已经有一些例如上面这些现成的Mybatis方法了,我现在想对这个查询进行分页,我该怎么办呢?


如果是手写SQL,我需要增加两个接口,一个查询count总数,一个改为分页形式的。需要在xml中,复制粘贴,然后改改语句,似乎也不是很难。你是这样做的吗?


如果使用这个插件,我需要做什么呢???


对Mybatis已经写好的这些方法来说,我什么都不需要改。


但是Service层可能需要动一下。具体上面这个例子。看下面的Service层调用代码。


不需要分页时候的代码:

[java]  view plain  copy
  在CODE上查看代码片 派生到我的代码片
  1. public List<SysLoginLog> findSysLoginLog(String loginIp,  
  2.                                          String username,  
  3.                                          String loginDate,  
  4.                                          String exitDate,  
  5.                                          String logerr) throws BusinessException {  
  6.     return sysLoginLogMapper.findSysLoginLog(loginIp, username, loginDate, exitDate, logerr);  
  7. }  

增加分页功能之后的代码:

[java]  view plain  copy
  在CODE上查看代码片 派生到我的代码片
  1. public PageHelper.Page<SysLoginLog> findSysLoginLog(String loginIp,  
  2.                                          String username,  
  3.                                          String loginDate,  
  4.                                          String exitDate,  
  5.                                          String logerr,  
  6.                                          int pageNumber,  
  7.                                          int pageSize) throws BusinessException {  
  8.     PageHelper.startPage(pageNumber,pageSize);  
  9.     sysLoginLogMapper.findSysLoginLog(loginIp, username, loginDate, exitDate, logerr);  
  10.     return PageHelper.endPage();  
  11. }  


相比较而言:

返回值从List<SysLoginLog>改成了PageHelper.Page<SysLoginLog>

入参增加了两个,pageNumber和pageSize


然后过程代码中,先调用了

[java]  view plain  copy
  在CODE上查看代码片 派生到我的代码片
  1. PageHelper.startPage(pageNumber,pageSize);  
startPage是告诉拦截器说我要开始分页了。分页参数是这两个。

然后调用原来的Mybatis代码:

[java]  view plain  copy
  在CODE上查看代码片 派生到我的代码片
  1. sysLoginLogMapper.findSysLoginLog(loginIp, username, loginDate, exitDate, logerr);  
这里没有接收返回值,会不会觉得奇怪?实际上PageHelper已经自动接收了返回值。通过下面的代码可以取出返回值:

[java]  view plain  copy
  在CODE上查看代码片 派生到我的代码片
  1. PageHelper.endPage();  
同时endPage告诉拦截器说我结束分页了,不需要你了。
目录
相关文章
|
3月前
|
SQL XML Java
8、Mybatis-Plus 分页插件、自定义分页
这篇文章介绍了Mybatis-Plus的分页功能,包括如何配置分页插件、使用Mybatis-Plus提供的Page对象进行分页查询,以及如何在XML中自定义分页SQL。文章通过具体的代码示例和测试结果,展示了分页插件的使用和自定义分页的方法。
8、Mybatis-Plus 分页插件、自定义分页
|
20天前
|
SQL Java 数据库连接
深入 MyBatis-Plus 插件:解锁高级数据库功能
Mybatis-Plus 提供了丰富的插件机制,这些插件可以帮助开发者更方便地扩展 Mybatis 的功能,提升开发效率、优化性能和实现一些常用的功能。
115 26
深入 MyBatis-Plus 插件:解锁高级数据库功能
|
11天前
|
SQL Java 数据库连接
【MyBatisPlus·最新教程】包含多个改造案例,常用注解、条件构造器、代码生成、静态工具、类型处理器、分页插件、自动填充字段
MyBatis-Plus是一个MyBatis的增强工具,在 MyBatis 的基础上只做增强不做改变,为简化开发、提高效率而生。本文讲解了最新版MP的使用教程,包含多个改造案例,常用注解、条件构造器、代码生成、静态工具、类型处理器、分页插件、自动填充字段等核心功能。
【MyBatisPlus·最新教程】包含多个改造案例,常用注解、条件构造器、代码生成、静态工具、类型处理器、分页插件、自动填充字段
|
20天前
|
SQL 缓存 Java
【详细实用のMyBatis教程】获取参数值和结果的各种情况、自定义映射、动态SQL、多级缓存、逆向工程、分页插件
本文详细介绍了MyBatis的各种常见用法MyBatis多级缓存、逆向工程、分页插件 包括获取参数值和结果的各种情况、自定义映射resultMap、动态SQL
【详细实用のMyBatis教程】获取参数值和结果的各种情况、自定义映射、动态SQL、多级缓存、逆向工程、分页插件
|
1月前
|
SQL JSON Java
mybatis使用三:springboot整合mybatis,使用PageHelper 进行分页操作,并整合swagger2。使用正规的开发模式:定义统一的数据返回格式和请求模块
这篇文章介绍了如何在Spring Boot项目中整合MyBatis和PageHelper进行分页操作,并且集成Swagger2来生成API文档,同时定义了统一的数据返回格式和请求模块。
56 1
mybatis使用三:springboot整合mybatis,使用PageHelper 进行分页操作,并整合swagger2。使用正规的开发模式:定义统一的数据返回格式和请求模块
|
2月前
|
SQL Java 数据库连接
解决mybatis-plus 拦截器不生效--分页插件不生效
本文介绍了在使用 Mybatis-Plus 进行分页查询时遇到的问题及解决方法。依赖包包括 `mybatis-plus-boot-starter`、`mybatis-plus-extension` 等,并给出了正确的分页配置和代码示例。当分页功能失效时,需将 Mybatis-Plus 版本改为 3.5.5 并正确配置拦截器。
709 6
解决mybatis-plus 拦截器不生效--分页插件不生效
|
2月前
|
SQL XML Java
springboot整合mybatis-plus及mybatis-plus分页插件的使用
这篇文章介绍了如何在Spring Boot项目中整合MyBatis-Plus及其分页插件,包括依赖引入、配置文件编写、SQL表创建、Mapper层、Service层、Controller层的创建,以及分页插件的使用和数据展示HTML页面的编写。
springboot整合mybatis-plus及mybatis-plus分页插件的使用
|
3月前
|
SQL Java 关系型数据库
MyBatis-Plus 分页魅力绽放!紧跟技术热点,带你领略数据分页的高效与便捷
【8月更文挑战第29天】在 Java 开发中,数据处理至关重要,尤其在大量数据查询与展示时,分页功能尤为重要。MyBatis-Plus 作为一款强大的持久层框架,提供了便捷高效的分页解决方案。通过封装数据库分页查询语句,开发者能轻松实现分页功能。在实际应用中,只需创建 `Page` 对象并设置页码和每页条数,再通过 `QueryWrapper` 构建查询条件,调用 `selectPage` 方法即可完成分页查询。MyBatis-Plus 不仅生成分页 SQL 语句,还自动处理参数合法性检查,并支持条件查询和排序等功能,极大地提升了系统性能和稳定性。
58 0
|
1月前
|
Java 数据库连接 Maven
mybatis使用一:springboot整合mybatis、mybatis generator,使用逆向工程生成java代码。
这篇文章介绍了如何在Spring Boot项目中整合MyBatis和MyBatis Generator,使用逆向工程来自动生成Java代码,包括实体类、Mapper文件和Example文件,以提高开发效率。
118 2
mybatis使用一:springboot整合mybatis、mybatis generator,使用逆向工程生成java代码。
|
1月前
|
前端开发 Java Apache
Springboot整合shiro,带你学会shiro,入门级别教程,由浅入深,完整代码案例,各位项目想加这个模块的人也可以看这个,又或者不会mybatis-plus的也可以看这个
本文详细讲解了如何整合Apache Shiro与Spring Boot项目,包括数据库准备、项目配置、实体类、Mapper、Service、Controller的创建和配置,以及Shiro的配置和使用。
353 1
Springboot整合shiro,带你学会shiro,入门级别教程,由浅入深,完整代码案例,各位项目想加这个模块的人也可以看这个,又或者不会mybatis-plus的也可以看这个