Mybatis 学习之 分页实现
文章目录
- 1. Mybatis
- 1.1. 代码实现
- 2. Mybatis Plus
- 2.1. 代码实现
- 2.2. 特别注意
- 3. PageHelper
- 3.1. 代码实现
- 3.2. 特别注意
- 参考资料
1. Mybatis
1.1. 代码实现
package com.example.demo;import org.mybatis.spring.annotation.MapperScan;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;@MapperScan(value = "com.example.demo.mapper")
@SpringBootApplication
public class DemoApplication {public static void main(String[] args) {SpringApplication.run(DemoApplication.class, args);}}
package com.example.demo.mapper;import com.example.demo.model.SysUser;
import com.example.demo.model.page.BasePageReq;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;import java.util.List;@Mapper
public interface UserMapper {List<SysUser> page(@Param(value = "pageReq") BasePageReq pageReq);}
<?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.example.demo.mapper.UserMapper"><select id="page" resultType="com.example.demo.model.SysUser"><bind name="startIndex" value="(pageReq.pageNum-1)*pageReq.pageSize"/>SELECT ID AS id, NAME AS name, AGE AS ageFROM SYS_USERORDER BY ID ASCLIMIT #{startIndex}, #{pageReq.pageSize}</select></mapper>
mybatis:mapper-locations: classpath:mapper/*.xmltype-aliases-package: com.example.demo.model
<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency><groupId>org.mybatis.spring.boot</groupId><artifactId>mybatis-spring-boot-starter</artifactId><version>2.3.0</version>
</dependency><dependency><groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId><version>8.0.15</version>
</dependency>
<!-- https://mvnrepository.com/artifact/org.projectlombok/lombok -->
<dependency><groupId>org.projectlombok</groupId><artifactId>lombok</artifactId><version>1.18.24</version><scope>provided</scope>
</dependency>
<dependency><groupId>com.google.guava</groupId><artifactId>guava</artifactId><version>30.1-jre</version>
</dependency>
2. Mybatis Plus
2.1. 代码实现
package com.example.demo;import org.mybatis.spring.annotation.MapperScan;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;@MapperScan(value = "com.example.demo.mapper")
@SpringBootApplication
public class DemoApplication {public static void main(String[] args) {SpringApplication.run(DemoApplication.class, args);}}
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;Page<SysUser> list = userMapper.page(new Page<>(pageReq.getPageNum(), pageReq.getPageSize()));
package com.example.demo.mapper;import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.example.demo.model.SysUser;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;import java.util.List;@Mapper
public interface UserMapper {Page<SysUser> page(@Param(value = "pageReq") IPage<SysUser> pageReq);}
<?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.example.demo.mapper.UserMapper"><select id="page" resultType="com.example.demo.model.SysUser">SELECT ID AS id, NAME AS name, AGE AS ageFROM SYS_USERORDER BY ID ASC</select></mapper>
mybatis-plus:mapper-locations: classpath*:mapper/*.xmltype-aliases-package: com.example.demo.modelconfiguration:log-impl: org.apache.ibatis.logging.stdout.StdOutImpl
<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency><groupId>com.baomidou</groupId><artifactId>mybatis-plus-boot-starter</artifactId><version>3.5.1</version>
</dependency>
<dependency><groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId><version>8.0.15</version>
</dependency>
<!-- https://mvnrepository.com/artifact/org.projectlombok/lombok -->
<dependency><groupId>org.projectlombok</groupId><artifactId>lombok</artifactId><version>1.18.24</version><scope>provided</scope>
</dependency>
<dependency><groupId>com.google.guava</groupId><artifactId>guava</artifactId><version>30.1-jre</version>
</dependency>
2.2. 特别注意
Mybatis Plus分页功能中使用了CCJSqlParser,其中CCJSqlParser#Statement在处理复杂 SQL时,存在性能问题
3. PageHelper
3.1. 代码实现
package com.example.demo;import org.mybatis.spring.annotation.MapperScan;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;@MapperScan(value = "com.example.demo.mapper")
@SpringBootApplication
public class DemoApplication {public static void main(String[] args) {SpringApplication.run(DemoApplication.class, args);}}
import com.github.pagehelper.Page;
import com.github.pagehelper.PageHelper;Page<SysUser> list = PageHelper.startPage(pageReq.getPageNum(), pageReq.getPageSize()).doSelectPage(() -> userMapper.page());
package com.example.demo.mapper;import com.example.demo.model.SysUser;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;import java.util.List;@Mapper
public interface UserMapper {List<SysUser> page();}
<?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.example.demo.mapper.UserMapper"><select id="page" resultType="com.example.demo.model.SysUser">SELECT ID AS id, NAME AS name, AGE AS ageFROM SYS_USERORDER BY ID ASC</select></mapper>
mybatis-plus:mapper-locations: classpath*:mapper/*.xmltype-aliases-package: com.example.demo.modelconfiguration:log-impl: org.apache.ibatis.logging.stdout.StdOutImpl
<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency><groupId>com.baomidou</groupId><artifactId>mybatis-plus-boot-starter</artifactId><version>3.5.1</version>
</dependency>
<dependency><groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId><version>8.0.15</version>
</dependency>
<!-- https://mvnrepository.com/artifact/com.github.pagehelper/pagehelper -->
<dependency><groupId>com.github.pagehelper</groupId><artifactId>pagehelper</artifactId><version>5.0.0</version>
</dependency>
<dependency><groupId>com.github.jsqlparser</groupId><artifactId>jsqlparser</artifactId><version>4.3</version>
</dependency>
<!-- https://mvnrepository.com/artifact/org.projectlombok/lombok -->
<dependency><groupId>org.projectlombok</groupId><artifactId>lombok</artifactId><version>1.18.24</version><scope>provided</scope>
</dependency>
<dependency><groupId>com.google.guava</groupId><artifactId>guava</artifactId><version>30.1-jre</version>
</dependency>
3.2. 特别注意
PageHelper分页功能中使用了CCJSqlParser,其中CCJSqlParser#Statement在处理复杂 SQL时,存在性能问题
参考资料
- Mybatis PageHelper编译SQL引发的一次性能问题.18286262
相关文章:
Mybatis 学习之 分页实现
文章目录 1. Mybatis1.1. 代码实现 2. Mybatis Plus2.1. 代码实现2.2. 特别注意 3. PageHelper3.1. 代码实现3.2. 特别注意 参考资料 1. Mybatis 1.1. 代码实现 package com.example.demo;import org.mybatis.spring.annotation.MapperScan; import org.springframework.boot…...
Spring Boot文件上传
配置文件上传属性: 在application.properties文件中配置文件上传的属性,包括上传目录的路径、文件大小限制等。 spring.servlet.multipart.max-file-size10MB spring.servlet.multipart.max-request-size10MB处理文件上传请求 上传的文件按照日期进行…...
基于Springboot+Vue的高校体育运动会比赛系统(含源码+数据库)
1.开发环境 开发系统:Windows10/11 架构模式:MVC/前后端分离 JDK版本: Java JDK1.8 开发工具:IDEA 数据库版本: mysql5.7或8.0 数据库可视化工具: navicat 服务器: SpringBoot自带 apache tomcat 主要技术: Java,Springboot,mybatis,mysql,vue 2.视频演示地址 3.功能 该系统…...
【JavaEE】——内存可见性问题
阿华代码,不是逆风,就是我疯,你们的点赞收藏是我前进最大的动力!!希望本文内容能够帮助到你! 目录 一:内存可见性问题 1:代码解释 2:结果分析 (1…...
YOLO训练参数设置解析
笔者按照教程训练完YOLO后对train训练参数配置产生兴趣,因此下文参考官方文档进行总结 Train - Ultralytics YOLO Docs YOLO 模型的训练设置包括训练过程中使用的各种超参数和配置。 这些设置会影响模型的性能、速度和准确性。 关键的训练设置包括批量大小、学习率…...
基于OpenCV的实时年龄与性别识别(支持CPU和GPU)
关于深度实战社区 我们是一个深度学习领域的独立工作室。团队成员有:中科大硕士、纽约大学硕士、浙江大学硕士、华东理工博士等,曾在腾讯、百度、德勤等担任算法工程师/产品经理。全网20多万粉丝,拥有2篇国家级人工智能发明专利。 社区特色…...
理解Js执行上下文
执行上下文 执行上下文(Context)又称上下文,在 JavaScript 中是一个重要的概念,它决定了变量和函数的可访问性及其行为。每个上下文都有一个关联的变量对象(Variable Object),所有在该上下文中定义的变量和…...
微信小程序 蓝牙通讯
客户的需求如下:通过微信小程序控制蓝牙ble设备(电子面膜),通过不同指令控制面膜的亮度和时间。 01.首先看下客户的ble设备服务文档:(本部分需要有点蓝牙基础,在调试过程中可以用安卓软件nRF Connect软件来执行测试命令) 0xFFF1灯控命令 命…...
java后端项目技术记录
后端使用技术记录 一、软件1. apifox,API管理软件问题 2. nginx前端服务器(1) 反向代理(2) 负载均衡 二、问题1. 使用spring全局异常处理器处理特定的异常2. 扩展springmvc的消息转换器(对象和json数据的转换)3. 路径参数的接收4. 实体构建器…...
PostgreSQL数据库与PostGIS在Windows中的部署与运行
本文介绍在Windows电脑中,下载、安装、部署并运行PostgreSQL与PostGIS数据库服务的方法。 PostgreSQL是一种功能强大的开源关系型数据库管理系统(RDBMS),以其稳定性、可靠性和丰富的功能而闻名;其支持多种高级特性&…...
高级算法设计与分析 学习笔记10 平摊分析
动态表,可以变长。 一溢出就另起一个两倍大小的表。 可以轻易证明把n个数字放进去的时间复杂度是O(n),n n/2 n/4……也就2n,插入数字本身也就是n,加起来最多不超过3n. 这种复杂度究竟是怎么算的?毕竟每次插入复杂度…...
从“纸面算力”到“好用算力”,超聚变打通AI+“最后一公里”
如果要评选2024年的年度科技名词,AI当属最热门的候选项。 年初的《政府工作报告》中首次提出了“人工智能”行动,正在从顶层设计着手,加快形成以人工智能为引擎的新质生产力。 折射到市场层面,AI作为一种新的范式,不…...
【有啥问啥】具身智能(Embodied AI):人工智能的新前沿
具身智能(Embodied AI):人工智能的新前沿 引言 在人工智能(AI)的进程中,具身智能(Embodied AI)正逐渐成为研究与应用的焦点。具身智能不仅关注于机器的计算能力,更强调…...
11-pg内核之锁管理器(六)死锁检测
概念 每个事务都在等待集合中的另一事务,由于这个集合是一个有限集合,因此一旦在这个等待的链条上产生了环,就会产生死锁。自旋锁和轻量锁属于系统锁,他们目前没有死锁检测机制,只能靠内核开发人员在开发过程中谨慎的…...
Git 与标签管理
在 Git 中,标签 tag 是指向某个 commit 的指针(所以创建和删除都很快)。Git 有 commit id 了,为什么还要有 tag?commit id 是一串无规律的数字,不好记;而 tag 是我们自定义的,例如我…...
【0334】Postgres内核之 auxiliary process(辅助进程)初始化 MyPgXact
1. MyPgXact(ProcGlobal->allPgXact)间接初始化 在上一篇文章【0333】Postgres内核之 auxiliary process(辅助进程)创建 PGPROC 中, 讲解了Postgres内核完成 AuxiliaryProcess 初始化 pid、lxid、procLatch、myProcLocks、lockGroupMembers等所有成员的过程。 这些成员…...
20.1 分析pull模型在k8s中的应用,对比push模型
本节重点介绍 : push模型和pull模型监控系统对比为什么在k8s中只能用pull模型的k8s中主要组件的暴露地址说明 push模型和pull模型监控系统 对比下两种系统采用的不同采集模型,即push型采集和pull型采集。不同的模型在性能的考虑上是截然不同的。下面表格简单的说…...
Ubuntu 镜像替换为阿里云镜像:简化你的下载体验
Ubuntu,作为一款广受欢迎的Linux发行版,以其稳定性和易用性著称。但你是否曾因为下载速度慢而感到沮丧?现在,你可以通过将Ubuntu的默认下载源替换为阿里云镜像来解决这个问题。本文将指导你如何完成这一过程。 为什么选择阿里云镜…...
The Sandbox 游戏制作教程第 6 章|如何使用装备制作出色的游戏 —— 避免环境危险
欢迎回到我们的系列,我们将记录 The Sandbox Game Maker 的 “On-Equip”(装备)功能的多种用途。 如果你刚加入 The Sandbox,装备功能是 “可收集组件”(Collectable Component)中的一个多功能工具…...
JavaScript中的输出方式
1. console.log() console.log() 是开发者在调试代码时最常用的方法。它将信息打印到浏览器的控制台,使开发者能够查看变量的值、程序的执行状态以及其他有用的信息。 用途:用于调试和记录程序运行时的信息。优点:简单易用,适合…...
雷达式多参数水文监测站
雷达式多参数水文监测站用先进的非接触式测量技术,结合水库断面参数精准计算流量,全程无需接触水体,从根源上规避水体环境对监测设备的影响。不受风、环境温度、雾霾、水体泥沙、漂浮物等外界因素干扰,即便在汛期水流浑浊、漂浮物…...
vSphere环境安全指南:使用vCenter创建受限用户的最佳实践
vSphere环境安全指南:精细化权限管理实战 在虚拟化基础设施管理中,vSphere环境的安全性直接关系到企业核心业务的稳定运行。作为高级管理员,我们常常面临一个两难选择:既要确保团队成员能够高效完成工作,又要防止过度授…...
CosyVoice CPU运行效率优化实战:从原理到性能调优
最近在做一个实时语音处理的项目,用到了CosyVoice这个框架。项目上线初期,发现服务在CPU上的表现不太理想,尤其是在处理并发语音流时,CPU占用率经常飙高,处理延迟也时高时低,很不稳定。经过一番排查和优化&…...
4吨卧式燃气蒸汽锅炉食品厂洗涤商用
WNS型4吨卧式燃气蒸汽锅炉,专为食品加工、商用洗涤等行业量身打造,是高效稳定、环保节能的核心供汽设备,完美适配食品蒸煮杀菌、洗涤熨烫烘干等高频蒸汽需求,助力企业降本增效、合规生产。 锅炉采用卧式三回程湿背式经典结构&…...
ResNet18物体识别在内容审核中的应用:快速过滤与分类图片
ResNet18物体识别在内容审核中的应用:快速过滤与分类图片 1. 内容审核的挑战与解决方案 在当今数字内容爆炸式增长的时代,内容审核已成为平台运营的关键环节。每天都有海量的图片需要被快速准确地分类和过滤,传统人工审核方式已无法满足需求…...
个人知识库构建:OpenClaw+GLM-4.7-Flash自动归档网页与文档
个人知识库构建:OpenClawGLM-4.7-Flash自动归档网页与文档 1. 为什么需要自动化知识管理 作为一个长期与技术文档打交道的开发者,我发现自己陷入了一个典型的知识管理困境:每天浏览的优质技术文章、收藏的GitHub仓库、订阅的RSS源越来越多&…...
在CentOS 7上远程跑3D应用:保姆级TurboVNC+VirtualGL配置与GPU调用验证
在CentOS 7上构建高性能远程3D工作站:TurboVNC与VirtualGL深度配置指南 当工程师需要远程操控配备NVIDIA GPU的服务器运行Maya、Paraview或TensorBoard等图形密集型应用时,直接使用传统VNC会遇到3D渲染性能低下的问题。本方案通过TurboVNC的高效压缩传输…...
OpenClaw故障排查:Qwen3-VL:30B飞书连接常见问题解决
OpenClaw故障排查:Qwen3-VL:30B飞书连接常见问题解决 1. 问题背景与排查准备 上周在星图平台部署Qwen3-VL:30B时,我遇到了OpenClaw与飞书连接的一系列"诡异"问题。从WebSocket莫名断开到模型响应超时,整个过程就像在解一个技术版…...
从《贺花神》看AI趋势:当技术“理解人”,获客的方式彻底变了
今年春晚,一个节目让无数人屏住呼吸。故宫“白玉月令组佩”上的十二种花卉,化作十二位花神,在舞台上次第绽放。正月梅花、二月杏花、三月桃花……一人一景,一花一态。总导演于蕾说:“这非常非常难。”难在哪࿱…...
抗体研究如何依赖蛋白质翻译后修饰分析?
一、为何蛋白质翻译后修饰至关重要?蛋白质翻译后修饰是指在蛋白质生物合成完成后,通过共价连接化学基团或小分子蛋白对其进行的化学修饰。这一过程极大地扩展了蛋白质组的功能多样性。人类基因组仅编码约两万余个基因,但通过各类翻译后修饰&a…...
