详解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服务器上快速部署高效网站?

