Mybatis 学习之 分页实现

devtools/2024/10/4 15:33:56/

文章目录

  • 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

http://www.ppmy.cn/devtools/121324.html

相关文章

滚雪球学Oracle[2.3讲]:Oracle Listener配置与管理

全文目录&#xff1a; 前言一、Oracle Listener的基础概念1.1 什么是Oracle Listener&#xff1f;Listener的作用&#xff1a; 1.2 Oracle Listener的配置文件示例listener.ora配置文件&#xff1a; 1.3 启动与管理Listener 二、多Listener配置与负载分担2.1 多Listener的应用场…

TypeScript 算法手册 【计数排序】

文章目录 1. 计数排序简介1.1 计数排序定义1.2 计数排序特点 2. 计数排序步骤过程拆解2.1 找出数组中的最大值2.2 创建计数数组2.3 统计每个数字出现的次数2.4 重建排序后的数组 3. 计数排序的优化3.1 处理负数3.2 对象数组排序案例代码和动态图 4. 计数排序的优点5. 计数排序的…

Gradle 8.4.0 配置阿里云镜像的详细指南

引言 Gradle 是一个强大的构建工具&#xff0c;广泛用于自动化构建、测试、发布等过程。然而&#xff0c;由于网络原因&#xff0c;Gradle 默认的 Maven 中央仓库访问速度可能较慢&#xff0c;特别是在中国大陆地区。为了提高依赖下载速度&#xff0c;我们可以配置 Gradle 使用…

机器学习学习笔记-20240927

文章目录 一些简单的指令数据操作广播机制 标量&#xff0c;向量&#xff0c;矩阵的相互求导1. 标量对标量的求导2. 标量对向量的求导3. 向量对标量的求导4. 向量对向量的求导5. 矩阵对标量的求导6. 矩阵对向量的求导 链式求导法则YYDS求出损失函数偏导为0时的最优解w*1. 损失函…

计算机前沿技术-人工智能算法-大语言模型-最新研究进展-2024-10-02

计算机前沿技术-人工智能算法-大语言模型-最新研究进展-2024-10-02 1. APM: Large Language Model Agent-based Asset Pricing Models Authors: Junyan Cheng, Peter Chin https://arxiv.org/abs/2409.17266 APM: 基于大型语言模型的代理资产定价模型&#xff08;LLM Agent-b…

Windows 配置 MSYS2 并编译 x264 最详细教程

MSYS2 MSYS2是一个为Windows操作系统设计的软件开发环境,它提供了一个模拟类Unix系统的命令行界面以及一系列工具和库。MSYS2建立在Cygwin基础上,但使用了MinGW-w64作为编译器集合,旨在实现原生的Windows程序构建与运行。MSYS2的特点包括: POSIX兼容性:通过提供一个类似Li…

蓝桥杯【物联网】零基础到国奖之路:十七. 扩展模块之单路ADC和NE555

蓝桥杯【物联网】零基础到国奖之路:十七. 扩展模块之单路ADC和NE555 第一节 硬件解读第二节 CubeMx配置第三节 代码1&#xff0c;脉冲部分代码2&#xff0c;ADC部分代码![在这里插入图片描述](https://i-blog.csdnimg.cn/direct/57531a4ee76d46daa227ae0a52993191.png) 第一节 …

基于 C# 的文本文件的编码识别

基于 C# 的文本文件的编码识别 前言一、有 BOM 文件头二、无 BOM 文件头三、简体中文汉字编码四、C# 程序对编码的识别1、文件选择按钮代码&#xff1a;2、获取文件编码&#xff0c;有 BOM 的文件识别3、获取文件编码&#xff0c;UTF8 无 BOM 文件的识别4、获取文件编码&#x…