MyBatis

简介: 本文介绍多种分页实现方式:MyBatis自带RowBounds内存分页、PageHelper插件分页、SQL物理分页、数组分页及拦截器分页。对比逻辑分页与物理分页的优劣,指出大数据量下物理分页更优,推荐优先使用。

3.分页

1 自带rowbound分页
先将所有的结果集查询出来ResultSet,再进行内存分页(limit)

2 第三方插件pagehelper
会将一个查询SQL变成两部分执行,假设SQL是:select name from user;
①自动识别数据库类型,添加对应的分页关键字,如MySQL则limit,Oracle则rownum,DB2则fetch,查找出上面SQL的结果
②查找出上面结果,查询结果的总条数count
3 SQL分页
依赖limit进行实现,或者rownum等自身的SQL实现
4 数组分页

简而言之:查全部再subList

首先在dao层,创建StudentMapper接口,用于对数据库的操作。在接口中定义通过数组分页的查询方法,如下所示:

List<Student> queryStudentsByArray();

方法很简单,就是获取所有的数据,通过list接收后进行分页操作。创建StudentMapper.xml文件,编写查询的sql语句:

<select id="queryStudentsByArray"  resultMap="studentmapper"> select * from student </select>

以看出再编写sql语句的时候,我们并没有作任何分页的相关操作。这里是查询到所有的学生信息。接下来在service层获取数据并且进行分页实现:
定义IStuService接口,并且定义分页方法:

List<Student> queryStudentsByArray(int currPage, int pageSize);

通过接收currPage参数表示显示第几页的数据,pageSize表示每页显示的数据条数。

创建IStuService接口实现类StuServiceIml对方法实现,对获取到的数组通过currPage和pageSize进行分页:

@Override    
public List<Student> queryStudentsByArray(int currPage, int pageSize) { 
    List<Student> students = studentMapper.queryStudentsByArray(); 
    //  从第几条数据开始        
    int firstIndex = (currPage - 1) * pageSize; 
    //  到第几条数据结束        
    int lastIndex = currPage * pageSize; return students.subList(firstIndex, lastIndex); 
}

通过subList方法,获取到两个索引间的所有数据。

最后在controller中创建测试方法:

@ResponseBody        
@RequestMapping("/student/array/{currPage}/{pageSize}") 
public List<Student> getStudentByArray(@PathVariable("currPage") int currPage, @PathVariable("pageSize") int pageSize) { 
    List<Student> student = StuServiceIml.queryStudentsByArray(currPage, pageSize); 
    return student; 
}

通过用户传入的currPage和pageSize获取指定数据。

5 拦截器分页

自定义拦截器实现了拦截所有以ByPage【或自己约束的都是可以的】结尾的查询语句,并且利用获取到的分页相关参数统一在sql语句后面加上limit分页的相关语句。

6 总结

逻辑分页:即内存分页,就是mybatis自带的rowbounds,内存开销大,数据量小效率比物理分页快,但大数据量,易内存溢出

物理分页:上述2345,小数据量效率比逻辑分页慢,但是大数据量推荐用物理分页。

物理分页总是优先于逻辑分页。

目录
相关文章
|
20小时前
|
存储 NoSQL Linux
MongoDB单机部署
本文介绍MongoDB在Windows和Linux系统中的单机部署方法,涵盖下载安装、配置文件设置、命令行与图形化工具连接操作,并提供启动、关闭服务及常见问题处理步骤,助力快速搭建本地MongoDB环境。
25 8
MongoDB单机部署
|
16小时前
|
负载均衡 应用服务中间件 Nacos
Nacos配置中心
本文详细介绍Nacos作为配置中心的实现原理与实战步骤,涵盖配置管理、热更新、共享配置优先级及集群搭建,帮助微服务应用实现配置动态化、高可用部署。
11 0
|
16小时前
|
负载均衡 算法 架构师
Ribbon负载均衡
本文深入讲解Spring Cloud中Ribbon实现客户端负载均衡的原理,包括@LoadBalanced注解的作用、负载均衡策略分类与算法,并演示如何自定义配置及优化饥饿加载,帮助读者全面掌握Ribbon的核心机制与应用实践。
11 0
 Ribbon负载均衡
|
16小时前
|
Java Nacos Maven
Eureka服务注册与发现
本节介绍Spring Cloud中Eureka注册中心的搭建与使用,完成服务注册与发现功能,并为后续Nacos替换Eureka奠定基础。
9 0
|
16小时前
|
存储 Dubbo API
SpringCloud工程部署启动
本文介绍SpringCloud微服务工程搭建全过程,涵盖项目初始化、模块创建、依赖配置及数据库部署。通过两种方案实现工程导入,并基于RestTemplate完成服务间远程调用,解析微服务拆分与协作机制,助力掌握分布式架构核心技能。(239字)
8 0
|
17小时前
|
存储 安全 前端开发
1.认识OAuth2.0
OAuth2.0是一种开放授权协议,允许第三方应用在用户授权下访问其资源,而无需获取用户账号密码。相比传统授权更安全,广泛用于第三方登录、服务间资源共享等场景,支持授权码、简化、密码及客户端四种模式,其中授权码模式最安全,适用于Web应用;简化模式适合无后端的前端应用;密码模式用于高度信任的服务间调用;客户端模式则用于系统间内部通信。Spring Security OAuth2可实现单点登录与服务权限控制。
13 0
1.认识OAuth2.0
|
16小时前
|
SQL Java 数据库连接
持久层框架MyBatisPlus
MyBatisPlus是MyBatis的增强工具,简化单表CRUD操作,无需编写XML即可实现增删改查。通过继承BaseMapper、使用条件构造器(如QueryWrapper)、集成分页插件等,显著提升开发效率,并支持代码生成、逻辑删除、枚举处理器等高级功能。
11 0
持久层框架MyBatisPlus
|
16小时前
|
缓存 Java Nacos
@RefreshScope热更新原理
本文深入解析Spring Cloud中@RefreshScope注解实现配置热更新的原理。通过分析其组合注解特性,重点探讨@Scope(&quot;refresh&quot;)如何借助代理模式与缓存机制,在配置变更时触发Bean重建,结合Nacos动态刷新Environment,实现配置实时生效。
8 0
@RefreshScope热更新原理
|
16小时前
|
Java Shell Apache
Jmeter快速入门
本文介绍JMeter的安装与快速入门,包括下载、解压、运行步骤及中文界面设置方法,并演示创建线程组、添加HTTP取样器和查看测试结果的基本操作流程。
14 0
|
16小时前
|
SQL 安全 网络协议
常见的网络攻击
恶意软件、网络钓鱼、中间人攻击、DDoS攻击、SQL注入、零日漏洞及DNS隧道是常见网络安全威胁。恶意软件通过漏洞入侵,窃取数据或破坏系统;网络钓鱼伪装可信来源骗取信息;MitM攻击窃听通信;DDoS以海量流量瘫痪服务;SQL注入操控数据库;零日攻击利用未修复漏洞;DNS隧道则隐藏恶意数据传输,严重威胁网络安全。
11 0