hibernate分页实现

实现Struts+Hibernate框架下的高效分页功能 本文还有配套的精品资源,点击获取 简介:通过结合Struts和Hibernate这两个Java开源框架,本项目展示了如何实现Web应用程序中的数据分页。Struts负责处理用户请求并管理流程,而Hibernate用于数据库操作与业务逻辑解耦。项目中首先在Hibernate DAO层编写带有分页条件的查询方法,然后通过Struts的Action类调用这些方法,并在JSP页面利... 阅读详情

解决项目中一问题时, 由于涉及到Hibernate的分页功能, 于是打草搂兔子地研究了下Hibernate分页功能的实现。

 

我们先来看用Hibernate来实现分页的代码片段:

       Criteria c = session.createCriteria(Area.class);

      

       c.setFirstResult(10);

       c.setMaxResults(20);

      

       List list = c.list();

 

上面c.list()执行后,就看到了满足条件的十条记录,即第11到20这十条。

 

那么在Hibernate内部这是怎么实现的呢?

 

截下了Hibernate生成的sql(如何截,请见另一篇博文:Hibernate初始化时如何生成SQL语句?),它是这样的:

    select a.* from

 

(

  select row_.*, rownum rownum_ from

  ( select this_.id as id0_0_, this_.ALIAS_ID as ALIAS2_0_0_, this_.COMM as COMM0_0_, this_.CREATE_TIME as CREATE4_0_0_, this_.NAME as NAME0_0_ from AREA this_ ) row_

  where rownum <= 20

)  a

 

where a.rownum_ > 10

    注:为了下文说明方便,上面sql是我又加了些东东,如a和参数(10,20)。

那么这个sql是怎么生成的呢?

Debug过程中,经历了超人般的跨越后,最终在org.hibernate.dialect.Oracle9Dialect中的getLimitString方法中,看到了整个sql的组装过程。

 

 

源码就不粘在这了, 看它的原理,发现它巧妙地利用了Oracle数据中的伪列rownum。  

 

这里的sql有两个临时表 row_ 和 a。

l  第一个表row_里包含了满足条件的所有结果, 可能是1000条。

l  第二个表a,这里利用Oracle的伪列rownum, 取前20条, 并把这个伪列rownum(临时值)作为表a的一个真正存在的列保存下来, 这样就能光明正大地用a.rownum_ > 10过滤条件了。

 

 

至此,解释并记录完毕, 收队!

在数据库中用来数据库分页的几点:

oracle可以用伪列rownum来记录记录的行数 ;

mysql可以用limit来区分记录从第几条到第几条的记录 ;

sqlserver可以用top来区分记录的行数 ;

 

hibernate 通用分页的实现 hibernate_mysql_struts2 实现的通用分页类.欢迎指正 立即下载

相关推荐

CentOS 7升级GCC踩坑记:明明装了centos-release-scl,为啥找不到devtoolset-9-gcc-c++?

本文详细记录了在CentOS 7系统中升级GCC时遇到的`devtoolset-9-gcc-c++`不可用问题及其解决方案。通过分析`centos-release-scl`安装不完整的原因,提供了从清理残留、重新安装仓库配置到完整安装devtoolset-9工具链的全套操作指南,帮助开发者彻底解决类似环境配置难题。

weixin_29252171的博客 244

Hibernate如何实现分页的?

  解决项目中一问题时, 由于涉及到Hibernate的分页功能, 于是打草搂兔子地研究了下Hibernate分页功能的实现。   我们先来看用Hibernate来实现分页的代码片段:        Criteria c = session.createCriteria(Area.class);               c.setFirstResult(10);      ...

rmn190 531

如何适配自定义激光雷达数据到LIO-SAM:解决ring和time参数缺失问题

本文详细解析了如何将非标准激光雷达(如速腾、Livox)适配到LIO-SAM框架中,重点解决ring和time参数缺失问题。提供了从源码修改到通用适配中间件的多层级解决方案,并包含实机测试与性能调优指南,帮助开发者高效完成雷达数据适配。

weixin_42551227的博客 421

Hibernate笔记(一)

1. 使用Hibernate 导出数据库表(ExportDB.java 工具类)/** * 使用hibernate导出数据库(由modle和hibernate配置文件生成数据库表),但要先有数据库 */package com.zoukang.usermgr.util; impor

邹康----萧湘易水寒的专栏 2196

An工具介绍之摄像头

An工具介绍之摄像头

人生得意须尽欢 6187

【Segment Anything Model】十(1):利用SAM做分类任务,方法二,不放过SAM强大特征提取能力,将SAM提取到的ImageEmbedding插入到其他cnn网络中

直接黏贴复制就好'''该类定义了VGG-16的基本结构。features: 代表VGG网络的主体部分,即所有的卷积层和池化层。avgpool: 是自适应平均池化层,将特征图大小调整为7x7。classifier: 是VGG网络的分类部分,由全连接层组成。_initialize_weights(): 初始化权重的方法。

cvxiayixiao的博客 3562

hibernate分页

分页在任何系统中都是非常头疼的事情,有的数据库在语法上支持分页,而有的数据库则需要使用可滚动游标来实现,并且在不支持可滚动游标的系统上只能使用单向游标逐步接近要取得的数据。 Hibernate提供了一个支持跨系统的分页机制,这样无论底层是什么样的数据库都能用统一的接口进行分页操作。比如下面的代码就是从第500条开始取出100条记录: Query q = session.createQuery("f

键者天行 1万+

Label Studio 数据标注平台,大模型预训练与微调必备

摘要:LabelStudio是一款开源数据标注工具,支持文本、图像等多种数据类型的标注。本文介绍了其安装方法(通过conda创建环境并pip安装)、基础使用流程(创建项目、导入数据、设置标签、标注导出)以及AI自动标注功能的实现。重点讲解了如何通过MLBackend集成LangChain模型实现自动标注:创建自定义模型类、构建预测链、处理返回结果,最后配置到LabelStudio项目中。该功能可显著提升标注效率,标注人员只需在AI预测结果基础上进行修正。

技术引领业务创新 290

hibernate实现分页

一、采用HQL语言(HQL分页) 在HQL中实现分页非常方便,需要Query接口中的方法 Query q = session.createQuery("from Admin as a"); q.setFirstResult(1); //设置开始检索对象 q.setMaxResults(10); //设置每次检索返回的最大对象数 List l = q.list(); //返回结

星晴coral 706

Vue+OpenLayers:解决中国境内OpenStreetMap地图加载问题

然而,在使用OpenLayers和Vue框架搭建地图应用时,很多中国开发者可能会遇到一个常见问题:OpenStreetMap(OSM)地图无法正常加载。为了解决这个问题,我们可以使用其他方式获取地图数据,比如使用国内的地图服务提供商。通过使用国内地图服务商提供的地图数据,我们可以解决OpenStreetMap地图加载问题。然后,我们创建一个OpenLayers地图对象,并指定地图图层的源为国内地图服务商提供的地图URL。属性,可以将地图的中心点和缩放级别调整到我们需要的位置。

CodeWhizZ的博客 8273

企业级托管钱包架构设计与MPC密钥管理:基于Go语言的生产级实践

本文探讨了2026年Web3生态中企业级托管钱包的技术架构与实现方案。文章指出,传统私钥管理模式已无法满足机构级资产管理需求,而基于多方安全计算(MPC)和门限签名(TSS)的技术方案成为主流选择。研究分析了托管钱包的四层架构设计,详细解读了MPC的核心技术原理,包括分布式密钥生成(DKG)和签名协议演进。通过Go语言实现案例,展示了密钥分片管理、DKG流程和交易签名等核心模块的代码实现。文章还提出了生产部署的安全原则、容灾设计和监控体系,并讨论了密钥撤销等现存挑战及TEE融合等未来趋势。研究为构建安全、高

分享AI、区块链技术及应用,未来已来 81

Hibernate 分页

中找到 - 这是一个基于Eclipse的项目,所以它应该很容易导入和运行。实体,与带有 JQL 实现的 JPA 非常相似——唯一的区别是查询语言。如您所见,使用此 API 将导致比普通 HQL 更详细的代码,但。另一方面,请记住,尽管滚动非常有效,但大窗口可能会占用相当多。本文简要介绍了在Hibernate中进行分页的各种方法。API,最后是使用 Hibernate 标准进行分页。在Hibernate中进行分页的最简单和最常见的方法是。最后,根据总数和给定的页面大小,我们可以计算。在这一点上,我们可以看。

allway2的博客 1512

后台管理系统-7-vue3之引入配置文件baseURL

mock=false,本地模拟。mock=true,线上模拟。baseURL+url=实际请求的URL。get请求param参数,post请求data参数。

qq_20466211的博客 208

Hibernate实现分页

Hibernate 可以实现分页查询, 例如: 从第2万条开始取出100条记录 代码: Query q = session.createQuery("from Cat as c"); q.setFirstResult(20000); q.setMaxResults(100); List l = q.list(); 那么Hibernate底层如何实现分页的呢?实际上Hibernate的查询定义在 net.sf.hibernate.loader.Loader这个类里面,仔细阅读

goustzhu地盘 656

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

hibernate分页的实现

系统采用springMVC+hibernate架构,本文是基于网络上的一个paginationsupport类经过修改而成,下面直接贴代码: 1.PaginationSupport类(封装页面数据) package com.darren.demo3l.commonUtils; import java.util.List; public class PaginationSupport {

MongolianWolf的专栏 1029

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

hibernate分页实现原理

Hibernate 可以实现分页查询,例如:   从第2万条开始取出100条记录   Query q = session.createQuery("from Cat as c");   q.setFirstResult(20000);   q.setMaxResults(100);   List l = q.list();   那么Hibernate底层如何实现分页

rubyzhudragon的专栏 460

最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版

Part-E1-SDIO-Specification-Ver4.00-Final-120220.pdf:最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版,包括SDIO 接口的外设,SDIO 接口官方协议等。

基于hibernate实现的分页技术

先说明一下基于hibernate实现分页的原理,假如从数据库取出100条数据,我们要让每页显示10条,假如从30开始,只需要设置起始位置和最大的返回结果即可 先上代码:注意传进来的参数有 Page这类,后面有介绍 [javascript] view plain copy public List queryByPage(final String usernam

xyjikl 526

Hibernate 可以实现分页查询

,例如:  从第2万条开始取出100条记录  Java代码   Query q = session.createQuery("from Cat as c");;   q.setFirstResult(20000);;   q.setMaxResults(100);;   List l = q.list();;   那么Hibernate底层如何实现分页的呢?实

HQingmu 青木河 581

基于 Hibernate Query 实现分页器

import java.util.List;import org.hibernate.HibernateException;import org.hibernate.Query;import org.hibernate.ScrollableResults;/** *//** * Title:分页器 * * Description: * * Copyright: Copyright (c) 

4399
上一篇: 服务器的负载均衡
下一篇: hibernate原理
xrt95050
博客等级 码龄20年 359粉丝 71原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值