详解Mybatis分页插件 - 示例代码

发布时间 - 2026-01-10 22:07:49    点击率:

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

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

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

public interface SysLoginLogMapper { 
  /** 
   * 根据查询条件查询登录日志 
   * @param logip 
   * @param username 
   * @param loginDate 
   * @param exitDate 
   * @return 
   */ 
  List<SysLoginLog> findSysLoginLog(@Param("logip") String logip, 
                   @Param("username") String username, 
                   @Param("loginDate") String loginDate, 
                   @Param("exitDate") String exitDate, 
                   @Param("logerr") String logerr); 
 
} 
<?xml version="1.0" encoding="UTF-8" ?> 
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd" > 
<mapper namespace="com.easternie.sys.dao.SysLoginLogMapper"> 
 <select id="findSysLoginLog" resultType="com.easternie.sys.vo.model.SysLoginLog"> 
  select * from sys_login_log a 
  <if test="username != null and username != ''"> 
   left join sys_user b on a.userid = b.userid 
  </if> 
  <where> 
   <if test="logip!=null and logip != ''"> 
    a.logip like '%'||#{logip}||'%' 
   </if> 
   <if test="username != null and username != ''"> 
    and (b.username like '%'||#{username}||'%' or b.realname like '%'||#{username}||'%') 
   </if> 
   <if test="loginDate!=null and loginDate!=''"> 
    and to_date(substr(a.logindate,0,10),'yyyy-MM-dd') = to_date(#{loginDate},'yyyy-MM-dd') 
   </if> 
   <if test="exitDate!=null and exitDate!=''"> 
    and to_date(substr(a.EXITDATE,0,10),'yyyy-MM-dd') = to_date(#{exitDate},'yyyy-MM-dd') 
   </if> 
   <if test="logerr!=null and logerr!=''"> 
    and a.logerr like '%'||#{logerr}||'%' 
   </if> 
  </where> 
  order by logid desc 
 </select> 
</mapper> 

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

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

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

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

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

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

不需要分页时候的代码:

public List<SysLoginLog> findSysLoginLog(String loginIp, 
                     String username, 
                     String loginDate, 
                     String exitDate, 
                     String logerr) throws BusinessException { 
  return sysLoginLogMapper.findSysLoginLog(loginIp, username, loginDate, exitDate, logerr); 
} 

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

public PageHelper.Page<SysLoginLog> findSysLoginLog(String loginIp, 
                     String username, 
                     String loginDate, 
                     String exitDate, 
                     String logerr, 
                     int pageNumber, 
                     int pageSize) throws BusinessException { 
  PageHelper.startPage(pageNumber,pageSize); 
  sysLoginLogMapper.findSysLoginLog(loginIp, username, loginDate, exitDate, logerr); 
  return PageHelper.endPage(); 
} 

相比较而言:

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

入参增加了两个,pageNumber和pageSize

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

PageHelper.startPage(pageNumber,pageSize); 

startPage是告诉拦截器说我要开始分页了。分页参数是这两个。

然后调用原来的Mybatis代码:

sysLoginLogMapper.findSysLoginLog(loginIp, username, loginDate, exitDate, logerr); 

这里没有接收返回值,会不会觉得奇怪?实际上PageHelper已经自动接收了返回值。通过下面的代码可以取出返回值:

PageHelper.endPage(); 

同时endPage告诉拦截器说我结束分页了,不需要你了。

你觉得这样的代码简单还是手写sql简单呢?

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。


# mybatis分页插件  # mybatis怎么实现分页  # mybatis分页  # SpringMVC+MyBatis分页(最新)  # Mybatis分页插件PageHelper的使用详解  # MyBatis存储过程、MyBatis分页、MyBatis一对多增删改查操作  # 自己动手写的mybatis分页插件(极其简单好用)  # Mybatis常用分页插件实现快速分页处理技巧  # Mybatis全面分页插件  # Java的MyBatis框架中实现多表连接查询和查询结果分页  # Mybatis实现增删改查及分页查询的方法  # Spring3.1.1+MyBatis3.1.1的增、删、查、改以及分页和事务管理  # Java简单实现SpringMVC+MyBatis分页插件  # 分页  # 返回值  # 不需要  # 最好用  # 如果你  # 我要  # 好了  # 都不  # 你是  # 拦截器  # 很难  # 我现在  # 会不会  # 这两个  # 说我  # 这样做  # 要用  # 这样一个  # 你了  # 什么呢 


相关栏目: 【 网站优化151355 】 【 网络推广146373 】 【 网络技术251813 】 【 AI营销90571


相关推荐: 使用C语言编写圣诞表白程序  HTML5空格在Angular项目里怎么处理_Angular中空格的渲染问题【详解】  Laravel如何处理JSON字段的查询和更新_Laravel JSON列操作与查询技巧  laravel怎么用DB facade执行原生SQL查询_laravel DB facade原生SQL执行方法  Laravel如何实现数据导出到PDF_Laravel使用snappy生成网页快照PDF【方案】  laravel怎么为API路由添加签名中间件保护_laravel API路由签名中间件保护方法  Claude怎样写结构化提示词_Claude结构化提示词写法【教程】  七夕网站制作视频,七夕大促活动怎么报名?  如何用VPS主机快速搭建个人网站?  如何在香港服务器上快速搭建免备案网站?  Laravel如何使用Telescope进行调试?(安装和使用教程)  如何生成腾讯云建站专用兑换码?  Python文本处理实践_日志清洗解析【指导】  Laravel如何实现多表关联模型定义_Laravel多对多关系及中间表数据存取【方法】  Laravel PHP版本要求一览_Laravel各版本环境要求对照  Laravel如何为API生成Swagger或OpenAPI文档  图片制作网站免费软件,有没有免费的网站或软件可以将图片批量转为A4大小的pdf?  香港服务器选型指南:免备案配置与高效建站方案解析  如何用免费手机建站系统零基础打造专业网站?  如何在万网主机上快速搭建网站?  详解免费开源的DotNet二维码操作组件ThoughtWorks.QRCode(.NET组件介绍之四)  免费网站制作appp,免费制作app哪个平台好?  php增删改查怎么学_零基础入门php数据库操作必知基础【教程】  Claude怎样写约束型提示词_Claude约束提示词写法【教程】  高配服务器限时抢购:企业级配置与回收服务一站式优惠方案  iOS发送验证码倒计时应用  laravel怎么通过契约(Contracts)编程_laravel契约(Contracts)编程方法  打开php文件提示内存不足_怎么调整php内存限制【解决方案】  使用Dockerfile构建java web环境  独立制作一个网站多少钱,建立网站需要花多少钱?  利用 Google AI 进行 YouTube 视频 SEO 描述优化  如何快速搭建高效WAP手机网站吸引移动用户?  Laravel模型关联查询教程_Laravel Eloquent一对多关联写法  专业商城网站制作公司有哪些,pi商城官网是哪个?  Laravel如何使用Service Provider服务提供者_Laravel依赖注入与容器绑定【深度】  活动邀请函制作网站有哪些,活动邀请函文案?  b2c电商网站制作流程,b2c水平综合的电商平台?  EditPlus中的正则表达式 实战(1)  Laravel中DTO是什么概念_在Laravel项目中使用数据传输对象(DTO)  如何在Ubuntu系统下快速搭建WordPress个人网站?  Laravel如何实现API资源集合?(Resource Collection教程)  Laravel的契約(Contracts)是什么_深入理解Laravel Contracts与依赖倒置  极客网站有哪些,DoNews、36氪、爱范儿、虎嗅、雷锋网、极客公园这些互联网媒体网站有什么差异?  Laravel怎么集成Log日志记录_Laravel单文件与每日日志配置及自定义通道【详解】  laravel怎么在请求结束后执行任务(Terminable Middleware)_laravel Terminable Middleware请求结束任务执行方法  laravel服务容器和依赖注入怎么理解_laravel服务容器与依赖注入解析  JavaScript Ajax实现异步通信  手机钓鱼网站怎么制作视频,怎样拦截钓鱼网站。怎么办?  Laravel如何使用Gate和Policy进行授权?(权限控制)  如何在IIS服务器上快速部署高效网站?