基于SqlServer+hibernate的简单分页查询

Hibernate5 MSSql分页问题处理 1、前言 hibernate的分页查询,代码如下/** * 分页查询(适用于Easyui分页) * 局限:排序仅支持单表 * @param hql HQL 如:'from MyTable o' * @param pageParams 分页参数 * @return 结果集 */ @Override @SuppressWarnings("unchecked") public List 阅读详情

目前项目中用分页查询数据的方式,通过webService把数据循环查询出来传给对方存储,用到了分页。在此我们只需要看分页逻辑代码(相当于ServiceImpl),和Dao层代码(分页查询的SQL)即可。

分页逻辑代码块如下(放在ServiceImpl里):

try {

			/****************** 分页每次取100条记录 **********************/

			// 总记录数
			int totalNum = wsCisInPatRegDao.queryTotalNum();
			System.out.println("总记录数"+totalNum);
			// 每页数量
			int pageSize = 100;
			// 取余数值,根据此值判断页数是否加1
			int tempValue = totalNum % pageSize;
			// 循环次数(页数)
			int pageNum;
			// 如果总记录数除以页数整除,则结果为页数,否则页数为结果+1
			if (tempValue != 0) {
				pageNum = totalNum / pageSize + 1;
			} else {
				pageNum = totalNum / pageSize;
			}
			// 循环,每次取100条记录 循环次数为页数
			for (int i = 0; i < pageNum; i++) {
				List<WsCISINPATREG> list = null;
				// 如每次取行号为如下以此类推的数据:1-100条 101-200条 201-300条
				// 从数据库查询数据
				list = wsCisInPatRegDao.pageQuery(1+i*pageSize,pageSize*(i+1));
				// 将数据转化成要求格式
				List<CISINPATREG> returnList= WsCISINPATREGVo.changeFromat(list);

			}

DaoImpl

	/**
	 * 查询总记录数
	 */
	@Override
	public Integer queryTotalNum() {
		List<WsCISINPATREG> returnlist = new ArrayList<WsCISINPATREG>();
		String sql = " select count(*) as \"totalNum\" "
				+ "from T_VISIT_RECORD v left join T_CIS_MAIN c on v.HIS_NO=c.HIS_NO "
				+ "left join T_DIAGNOSIS d on v.HIS_NO=d.HIS_NO and d.BMLX='0' and d.ZDLB='2' "
				+ "where v.TREAT_TYPE='2' ";
		returnlist = super.getBySQL(sql, WsCISINPATREG.class, false, null);
		return returnlist.get(0).getTotalNum();
	}

	/**
	 * 返回SQL语句
	 * @return
	 */
	public static String getSql() {
		String sql = " select  distinct dbo.NumberConversion(v.HIS_NO)  as \"visitid\","
				+ "c.YLJGDM as \"branchcode\","
				+ "dbo.NumberConversion(v.PAT_ID) as \"patid\","
				+ "v.HIS_NO as \"visitno\","
				+ "c.BAH as \"mrno\","
				+ "v.BED_NO as \"bedid\","
				+ "dbo.NumberConversion(v.STATE) as \"state\","
				+ "dbo.NumberConversion(c.ZYYSGH) as \"residentdoctor\","
				+ "dbo.NumberConversion(c.ZZYSGH) as \"attendingdoctor\","
				+ "dbo.NumberConversion(c.ZRYSGH) as \"chiefdoctor\","
				+ "dbo.NumberConversion(v.ADMISSION_DEPT_CODE) as \"indeptid\","
				+ "dbo.NumberConversion(c.RYBQ) as \"inwardid\","
				+ "dbo.NumberConversion(c.CYFS) as \"outway\","
				+ " dbo.NumberConversion(c.BXLX) as \"feenature\","
				+ "dbo.DateConversion(v.TREAT_DATE) as \"regtime\","
				+ "dbo.DateConversion(v.LEAVE_TIME) as \"clnouttime\","
				+ "dbo.NumberConversion(v.TREAT_TYPE) as \"inway\","
				+ "d.ZDBM as \"indiagcode\","
				+ "d.ZDSM as \"indiagname\","
				+ "v.CARD_NUMBER as \"carddata\","
				+ "dbo.NumberConversion(v.NURSING_LEVEL) as \"carelevel\" ,"
				+" dbo.NumberConversion(v.ADMISSION_DEPT_CODE) as \"deptid\", "
                +" dbo.NumberConversion(v.WARD_CODE) as \"wardid\" " 
				+ "from T_VISIT_RECORD v left join T_CIS_MAIN c on v.HIS_NO=c.HIS_NO "
				+ "left join T_DIAGNOSIS d on v.HIS_NO=d.HIS_NO and d.BMLX='0' and d.ZDLB='2' "
				+ "left join T_TRANSFER_RECORD t on v.HIS_NO=t.HIS_NO "
				+ " where v.TREAT_TYPE='2' ";
		return sql;

	}

	/**
	 * 分页查询
	 */
	@Override
	public List<WsCISINPATREG> pageQuery(int beginNum, int endNum) {
		List<WsCISINPATREG> returnlist = new ArrayList<WsCISINPATREG>();
		String querySl = WsCisInPatRegDaoImpl.getSql();
		String sql = "SELECT * FROM (SELECT t.*,ROW_NUMBER() OVER (ORDER BY t.visitid desc) AS rowNum FROM ("
				+ querySl
				+ ") t) t1  WHERE rowNum >="
				+ beginNum
				+ " AND rowNum <=" + endNum + "";
		returnlist = super.getBySQL(sql, WsCISINPATREG.class, false, null);
		return returnlist;
	}

这里在说明一下分页的原理。

分页最主要的就是两次查询:

第一次,查询出满足当前条件的总记录数,用于计算页数等。比如,select count(*) from Table where coloum='查询条件';。

第二次,才是根据第一次查询条件得出的相关参数,进行分页查询,通常页数是前端发送过来的,在我的这个案例里面并不是,我的这个属于循环分页取得所有的数据。

不同的数据库分页语句不一样,这个大家可以自行搜索,然后写语句的时候放到数据库客户端中调试。如果在程序中调试费时间,因为每次都要重新部署启动服务器。




Hibernate 分页示例 SQLServer 数据库 一个基于Hibernate 和 SQLServer 数据库的分页示例,所有文件和数据库备份都在,只是速度不怎么快,如果加上自动生成下拉框,速度就更慢了,单表、10008条测试数据,如果哪位大侠改进了查询速度望告之:vni2007@163.com 立即下载

相关推荐

关于Hibernate分页类和jdbc的sql分页完美融合

NULL 博文链接:https://jeffenchung.iteye.com/blog/1472402

hibernate在sql server下分页的处理

今天要在sqlserver环境下做一个简单的增删改功能,要用到分页,开始直接用oracle数据库环境一直用的一个jdbc重构过的类处理,发现不行,才想起oracle和sqlserver的分页sql语句写法是很不一样的,于是打算google一下,紧接又想,何不先看看hibernate在sqlserver环境是怎么处理分页的(我这里用的是hibernate 3.0)。先把hibernate配置文件

eric的专栏 884

TPL5010硬件看门狗电路

在做一些采集频率很低的产品的时候,会考虑电池供电,比如表、电气表等,为了控制功耗,往往会在设备不需要工作的时候让它进入低功耗模式。为了设备的稳定性,避免死机后无法恢复,必须配置看门狗,一般的看门狗芯片,喂狗间隔时间是几秒钟。这样在喂狗和低功耗之间就产生了一个矛盾,频繁的喂狗就需要频繁的醒过来,这样功耗就很难做到很低。这颗看门狗芯片,特别适合上面的应用。2小时的间隔意味着主控芯片每2小时醒过来喂狗一次即可,而在2.5V供电的情况下,功耗仅仅35nA,几乎可以忽略不计。

zxm8513优快云博客 3306

SqlServer分页查询

原理:用两个变量来进行控制,pagesize变量来控制每页显示多少数据,pageindex变量来控制显示第几页,就是先查找第x页前的所有页数据的id,再去除前面所有页id的数据,剩下的数据取前5行。原理:查询当前页数前的所有数据取最大值(如果没有最大值就取0),再以最大值为条件获 取其余比其大的值,取当前页所显示的数。解释:查询后的字符A代表form后面的查询结果作为临时表、A为临时表的名字。解释:查询后的字符A代表form后面的查询结果作为临时表、A为临时表的名字。

weixin_62463536的博客 565

【Unity3D优化】优化内置shader的内存占用

在打AB包的过程中,并不会把这些Built-in的shader单独打包,并与材质球和预设体做好依赖,因此打AB包时,Unity会自行在材质球和预制体的AB包内每一个都包含进去用到的Built-in的Shader,而且运行时,由于加载的是不同的AB包,shader也是不同的实例,占用的也是多份内存。结合项目特点可以分析,由于项目里使用了大量的粒子特效,一些特殊的效果,会给特效师写定制的shader,但是这些常见的效果,特效师直接使用了Unity Built-in的shader。继续优化内存占用。

a310989583的专栏 2312

VS Code 配置 LaTeX 写作环境完全指南

本文详细介绍了如何在 VS Code 中配置 LaTeX 写作环境,涵盖了从安装必备组件到高级功能的全面指南。首先,用户需要安装 LaTeX 发行版(如 TeX Live 或 MiKTeX)和 VS Code 插件(如 LaTeX Workshop)。接着,通过修改 settings.json 和 keybindings.json 文件,用户可以自定义编译、查看快捷键等基础配置。文章还提供了高效写作技巧,如使用代码片段和多文件项目管理,并介绍了高级功能如反向同步、公式预览和参考文献管理。此外,针对常见问题(

weixin_70043030的博客 1984

【转载】hibernate 对sqlserver 分页的支持

Hibernate3.2对sqlserver2000查询分页的处理 对Hibernate的查询分页,想必大家都比较熟悉了。setFirstResult()和setMaxResults()就可以搞定。但是使用 sqlserver的朋友发现了吗,hibernate发送的分页语句中总是会有令人心烦的"select top 数字" 这样的字符串。比如你一页显示50条记录,现在要查询第...

moon_hunter的专栏 504

【实验】Linux下完全卸载oracle单实例(亲身体验完整版)

停止oracle数据库服务 停止监听 卸载数据库实例 因为自己懒得再弄dbca图形化界面啥的,直接采用dbca静默删除数据库实例,命令如下 dbca -silent -deleteDatabase -sourcedb orclhq -sid orcl -sysDBAUserName orcl -sysDBAPassword zte [oracle@slave ~]$ dbca -silent ...

萝卜吃鱼914的博客 1945

Hibernate5.1+Sqlserver2000分页查询

前几天改到一个bug:从MS SQLserver上面同步表结构并且采集数据写入其他库。然后用的核心技术是用的Hibernate。 其中bug出在SQLServer2000版本上。排查下来发现2000版本真的是一个让人头疼的数据库。 驱动jar包不兼容;hibernate5.1分页查询也不能用。系统表也与其他版本的天差地别。 一、驱动问题 一开始上网查询,发现大家都推荐用JTDS驱动。...

weixin_30480651的博客 209

光谱预处理最简单实现方法--基于OpenSA光谱分析库

系列文章目录 “光晰本质,谱见不同”,光谱作为物质的指纹,被广泛应用于成分分析中。伴随微型光谱仪/光谱成像仪的发展与普及,基于光谱的分析技术将不只停留于工业和实验室,即将走入生活,实现万物感知,见微知著。本系列文章致力于光谱分析技术的科普和应用。 文章目录系列文章目录前言一、数据来源二、代码解读2.1 读取数据2 .2 划分数据集2 .3 返回训练集和测试集并绘制光谱图片2.4 建立1-D CNN模型2.5 训练1-D CNN模型2.6 测试1-D CNN模型2.7 运行CNN模型,并用查看结果总结

Echo_Code的博客 7066

银河麒麟v10离线安装docker二进制包

因为工作需要在银河麒麟v10系统上离线部署k8s集群,k8s部署的前提是具有docker环境,因此离线安装docker成为必然。 1.下载docker包:Index of linux/static/stable/x86_64/ 选择自己合适的版本,我下载的是20.10.7 选择自己放置docker包的路径进行解压: cd /home/huawei/zq tar -zxvf docker-20.10.7.tgz 2. 给docker包解压出来的docker文件夹下的二进制文件赋..

q_hsolucky的博客 7683

总结一些分页查询的方法SQL server,MySQL,oracle数据库及hibernate中

分页查询是数据库查询中经常用到的一项操作,对查询出来的结果进行分页查询可以方便浏览。那么Oracle、SQL Server、MySQL是如何实现查询的呢?本文我们就来介绍这一部分内容。以及hibernate中的分页查询方式 首先我们先看一下SQL Server 数据库中SQL语句查询分页数据的解决方案: 实例:要求选取tbllendlist中第3000页的记录,每一页100条记录。

angus_737093684的博客 1893

告别Keil/IAR:在VSCode中用CMake+Clangd打造丝滑的STM32开发环境(附完整配置)

本文详细介绍了如何在VSCode中使用CMake和Clangd搭建高效的STM32开发环境,替代传统的Keil/IAR工具。通过完整的配置指南和快速开发技巧,帮助开发者实现轻量级、高度可定制的现代化开发流程,显著提升STM32项目的开发效率。

weixin_26843605的博客 164

Hibernate 自定义dialect(SQLServer)

    参考: 1.http://dingren.blog.51cto.com/4586729/1093242 2.http://tech.ccidnet.com/art/3539/20070717/1146833_1.html        hibernate 在查询一些大数据类型如:varchar(max)时,会报“ No Dialect mapping for JDBC t...

dampce32的专栏 1775

Python爬虫教程:抓取电商网站评论(以淘宝和京东为例)

通过本文的介绍,我们学会了如何使用Python编写爬虫,抓取淘宝和京东等电商平台的商品评论数据。我们介绍了如何使用电商平台提供的开放API以及如何通过模拟浏览器来抓取动态加载的数据。此外,我们还讨论了如何应对反爬虫技术,如何存储抓取的数据等。爬取电商平台的数据是一个强大的工具,能够为市场分析、消费者行为研究、产品优化等领域提供有力的支持。然而,在使用爬虫技术时,我们必须遵循法律法规,尊重平台的隐私政策,避免滥用数据。

2201_76125261的博客 1737

ssm框架搭建

这个是一个在idea上成功跑起来的ssm框架项目,保存在这里方便以后使用直接下载

Hibernate3.2对sqlserver2005查询分页的处理

对Hibernate的查询分页,想必大家都比较熟悉了。setFirstResult()和setMaxResults()就可以搞定。但是使用sqlserver的朋友发现了吗,hibernate发送的分页语句中总是会有令人心烦的"select top 数字" 这样的字符串。比如你一页显示50条记录,现在要查询第100页的数据,则会出现"select top 50000"这样的语句,它是先把前5000...

百威 159

Data-Structures-and-Algorithm-Analysis-in-Java.pdf

作者: Weiss, Mark A. 出版社: Addison Wesley Data Structures and Algorithm Analysis in Java is an “advanced algorithms” book that fits between traditional CS2 and Algorithms Analysis courses. In the old ACM Curriculum Guidelines, this course was known as CS7. This text is for readers who want to learn good programming and algorithm analysis skills simultaneously so that they can develop such programs with the maximum amo...

oracle mysql mssql_Oracle/MySql/SQL Sqlserver分页查询

简述简单概括一下Oracle,MySql,SQL Sqlserver这三个数据库的分页查询语句。Oracle分页查询例:每页显示两条数据,现在要查询第二页,也就是第3-4条数据。查询语句:1 select * from (2 select dept.*,rownum num from dept where rownum <= 43 ) d where d.num >= 3...

weixin_35979889的博客 165

锂电池充电器电路设计 里面有电路

锂电池充电器电路设计 里面有电路 3.7V升压到5V电路设计。

hibernate 3.2.7 支持SQL SERVER 2005+的分页

由于hibernate 3.2.7是用top处理mssql 查询分页,效率不高。由于在 3.6.x 版本中已经有改进的代码,因此从最近的版本hibernate-distribution-3.6.10.Final-dist.tar.gz中拷贝出SQLServer2005Dialect.java、SQLServer2008Dialect.java 具体目录是 hibernate-distrib

Yewberry 的点滴积累 2977

Oracle/MySql/SQL Sqlserver分页查询

简述     简单概括一下Oracle,MySql,SQL Sqlserver这三个数据库的分页查询语句。 Oracle分页查询     例:每页显示两条数据,现在要查询第二页,也就是第3-4条数据。     查询语句: 1 select * from ( 2 select dept.*,rownum num from dept where rownum &...

weixin_30458043的博客 377

hibernate 方言org.hibernate.dialect.SQLServer2005Dialect导致字段分析不正确的问题

由于 org.hibernate.dialect.SQLServerDialect 方言中的分页不是真分页 所以用了org.hibernate.dialect.SQLServer2005Dialect作为方言 但是之后出现一个郁闷的问题。我的一个表里面有一个字段名称是distinct_code,因为某程序员设计表的时候,把单词写错了,本来应该是district_code的。写错的结果就是,hi...

meiweirenjian的专栏 1023

Hibernate Dialect for SqlServer2005

Hibernate一直没有提供针对SqlServer2005的Dialect,原有的SqlServerDialect不支持物理分页查询。最近经常使用SqlServer2005,所以就很想写一个使用SqlServer2005 ROW_NUMBER()函数实现limit查询的Dialect类。 下面这个类是使用ROW_NUMBER()函数分页的Dialect,开始是从NHibernate移植的,后来...

风之力——Essential Java 267

hibernate5连接SQLServer2008谜一样的错误

很正常的一套分页:然而无情报错:我当时就蒙蔽了,打断点进去,发现就是查的时候出了异常。好吧,写个测试类,一测,果然报错。通过百度.....发现是hibernate.dialect没写对,我用的是SQLSERVER2008,hibernate里头应该这么配置。原先是写的hibernate.dialect.SQLServerDialect。对了,我用的是hibernate5,原来是Hibernate5...

qq_34831781的博客 234

Hibernate3.2对sqlserver2000查询分页的处理

Hibernate3.2对sqlserver2000查询分页的处理 对Hibernate的查询分页,想必大家都比较熟悉了。setFirstResult()和setMaxResults()就可以搞定。但是使用 sqlserver的朋友发现了吗,hibernate发送的分页语句中总是会有令人心烦的"select top 数字" 这样的字符串。比如你一页显示50条记录,现在要查询第...

gcy6164的专栏 211

SQL Server2014 数据库 与 Hibernate 分页出现异常,无法查询到数据

原因分析:可能是sqlserver数据库的方言导致的hibernate查询出现问题,通过重写父类SQLServerDialect中的getLimitString方法还是无法解决问题。对此问题进行记录。后续寻找解决方案。Eclipse对出现的问题有如下提示:...

weixin_42655730的博客 416
上一篇: 初入职场-17加油!
下一篇: ==和equals()区别
黄三yeah
博客等级 码龄11年 28粉丝 79原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值