返回顶部
首页 > 资讯 > 精选 >Hibernate分页管理怎么实现
  • 533
分享到

Hibernate分页管理怎么实现

2023-06-17 21:06:21 533人浏览 八月长安
摘要

本篇内容主要讲解“Hibernate分页管理怎么实现”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“Hibernate分页管理怎么实现”吧!Hibernate中,通过对不同数据库的统一接口设计,实

本篇内容主要讲解“Hibernate分页管理怎么实现”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“Hibernate分页管理怎么实现”吧!

Hibernate中,通过对不同数据库的统一接口设计,实现了透明化、通用化的分页实现机制。

通过Criteria.setFirstResult和Criteria.setFetchSize方法设定分页范围,如:

Criteria criteria = session.createCriteria(TUser.class);  criteria.add(Expression.eq("age", "20"));  //从检索结果中获取第100条记录开始的20条记录  criteria.setFirstResult(100);  criteria.setFetchSize(20);

通过Query.setFirstResult和Query.setMaxResults方法也可以设定分页范围,如:

Query query = session.createQuery("from TUser");  query.setFirstResult(100);  query.setMaxResults(20);  // query.setFetchSize(20);  List list = query.list();

Hibernate中,抽象类org.hibernate.dialect.Dialect指定了所有底层数据库的对外统一接口,通过针对不同数据库提供相应的Dialect实现,数据库之间的差异性得以消除,从而为上层机制提供了透明的、数据库无关的存储层基础。对于分页机制而言,Dialect中定义了一个方法如下:

   public String getLimitString(String querySelect, boolean hasOffset) {    throw new UnsupportedOperationException( "paged queries not supported" );   }    public String getLimitString(String querySelect, int offset, int limit) {    return getLimitString( querySelect, offset>0 );   }

此方法用于在现有Select语句基础上,根据各个数据库自身特性,构造对应的记录返回限定子句。如MySQL中对应的记录限定子句为Limit,oracle中,通过rownum子句实现。MysqlDialect中的getLimitString实现:

public String getLimitString(String sql, boolean hasOffset) {    return new StringBuffer( sql.length()+20 )     .append(sql)     .append( hasOffset ? " limit ?, ?" : " limit ?")     .toString();   }

mysqlDialect.getLimitString方法的实现实际上是在给定的Select语句后追加MySQL所提供的专有SQL子句limit来实现。

Oracle9Dialect中的getLimitString实现:

public String getLimitString(String sql, boolean hasOffset) {        sqlsql = sql.trim();    boolean isForUpdate = false;    if ( sql.toLowerCase().endsWith(" for update") ) {     sqlsql = sql.substring( 0, sql.length()-11 );     isForUpdate = true;    }        StringBuffer pagingSelect = new StringBuffer( sql.length()+100 );    if (hasOffset) {     pagingSelect.append("select * from ( select row_.*, rownum rownum_ from ( ");    }    else {     pagingSelect.append("select * from ( ");    }    pagingSelect.append(sql);    if (hasOffset) {     pagingSelect.append(" ) row_ where rownum <= ?) where rownum_ > ?");    }    else {     pagingSelect.append(" ) where rownum <= ?");    }     if ( isForUpdate ) {     pagingSelect.append( " for update" );    }        return pagingSelect.toString();   }

通过Oracle特有的rownum子句来实现数据部分的读取。SQLServerDialect中的getLimitString实现:

public String getLimitString(String querySelect, int offset, int limit) {    if ( offset > 0 ) {     throw new UnsupportedOperationException( "sql server has no offset" );    }    return new StringBuffer( querySelect.length()+8 )     .append(querySelect)     .insert( getAfterSelectInsertPoint(querySelect), " top " + limit )     .toString();   }

通过SQLServer特有的top子句实现。HSQLDialect中的getLimitString实现:

public String getLimitString(String sql, boolean hasOffset) {    return new StringBuffer( sql.length() + 10 )      .append( sql )      .insert( sql.toLowerCase().indexOf( "select" ) + 6, hasOffset ? " limit ? ?" : " top ?" )      .toString();   }


大多数主流数据库都提供了数据部分读取机制,而对于某些没有提供相应机制的数据库而言,Hibernate也通过其他途径实现了分页,如通过Scrollable ResultSet,如果JDBC不支持Scrollable ResultSet,Hibernate也会通过ResultSet的next方法进行记录定位。Hibernate通过底层对分页机制的良好封装,使得开发人员无需关心数据分页的细节实现,将数据逻辑和存储逻辑分离开来,在提高生产效率的同时,也大大加强了系统在不同数据库平台之间的可移植性。

到此,相信大家对“Hibernate分页管理怎么实现”有了更深的了解,不妨来实际操作一番吧!这里是编程网网站,更多相关内容可以进入相关频道进行查询,关注我们,继续学习!

--结束END--

本文标题: Hibernate分页管理怎么实现

本文链接: https://lsjlt.com/news/293314.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • Hibernate分页管理怎么实现
    本篇内容主要讲解“Hibernate分页管理怎么实现”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“Hibernate分页管理怎么实现”吧!Hibernate中,通过对不同数据库的统一接口设计,实...
    99+
    2023-06-17
  • Hibernate Struts分页怎么实现
    本篇内容介绍了“Hibernate Struts分页怎么实现”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!一、在Hibernate Stru...
    99+
    2023-06-17
  • Hibernate Session管理怎么理解
    这篇文章主要介绍“Hibernate Session管理怎么理解”,在日常操作中,相信很多人在Hibernate Session管理怎么理解问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”Hibernate S...
    99+
    2023-06-17
  • Vue后台管理系统怎么实现分页功能
    这篇文章主要介绍“Vue后台管理系统怎么实现分页功能”,在日常操作中,相信很多人在Vue后台管理系统怎么实现分页功能问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”Vue后台管理系统怎么实现分页功能”的疑惑有所...
    99+
    2023-06-21
  • KubeSphere分级管理怎么实现
    这篇“KubeSphere分级管理怎么实现”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“KubeSphere分级管理怎么实现...
    99+
    2023-07-02
  • Hibernate映射怎么实现
    这篇文章主要讲解了“Hibernate映射怎么实现”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“Hibernate映射怎么实现”吧!我曾对Hibernate有很深刻的印象,但我遇到的一个问题...
    99+
    2023-06-17
  • JS分页怎么实现
    实现JS分页可以通过以下步骤:1. 获取数据:从服务器或本地获取数据,并将数据存储在一个数组或对象中。2. 设置每页显示的数量和当前...
    99+
    2023-08-09
    JS
  • gridview分页怎么实现
    GridView分页可以通过以下步骤实现:1. 在页面上添加一个GridView控件,并设置分页属性。```asp```2. 在Pa...
    99+
    2023-08-15
    gridview
  • mysql怎么实现分页
    在 mysql 中实现分页,可以使用 limit 和 offset 子句。limit 子句指定返回的行数,而 offset 子句指定跳过的行数。使用步骤为:1. 确定每页行数;2. 确定...
    99+
    2024-05-22
    mysql
  • mysql分页怎么实现
    在 mysql 中实现分页可通过以下步骤:确定数据表。指定每页行数。计算当前页码。使用 limit 子句设置偏移量和行数,从指定的行开始获取数据。 MySQL 分页实现 如何实现 My...
    99+
    2024-08-01
    mysql
  • Hibernate中怎么实现处理级联操作
    本篇文章为大家展示了Hibernate中怎么实现处理级联操作,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。Hibernate处理级联操作Java 持久性映射过程中最重要和最复杂的一环就是确定如何映射...
    99+
    2023-06-17
  • 怎么用jquery实现员工管理注册页面
    这篇文章主要讲解了“怎么用jquery实现员工管理注册页面”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“怎么用jquery实现员工管理注册页面”吧!代码展示HTML页面代码<body&...
    99+
    2023-06-20
  • Hibernate一对多怎么实现
    本篇内容主要讲解“Hibernate一对多怎么实现”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“Hibernate一对多怎么实现”吧!先看由满江红翻译团队(RedSaga Translate T...
    99+
    2023-06-17
  • Hibernate Framework查询怎么实现
    本篇内容主要讲解“Hibernate Framework查询怎么实现”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“Hibernate Framework查询怎么实现”吧!Hibernate&nb...
    99+
    2023-06-17
  • Hibernate多对多怎么实现
    本篇内容主要讲解“Hibernate多对多怎么实现”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“Hibernate多对多怎么实现”吧!假設現在有User與Server兩個類別,一個User可以被...
    99+
    2023-06-03
  • 为什么用Spring来管理Hibernate
    这篇文章将为大家详细讲解有关为什么用Spring来管理Hibernate,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。为什么要用Hibernate框架?既然用Hibernate框架访问管理持...
    99+
    2023-06-17
  • mysql分页实现原理
    mysql 分页通过使用 limit 和 offset 子句实现,limit 指定要返回的行数,offset 指定要跳过的行数。分页过程包括确定页数、offset 值和 limit 值,...
    99+
    2024-08-02
    mysql
  • js怎么实现ajax分页
    这篇文章给大家分享的是有关js怎么实现ajax分页的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。什么是ajaxajax是一种在无需重新加载整个网页的情况下,能够更新部分网页的技术,可以通过在后台与服务器进行少量数...
    99+
    2023-06-08
  • ASP.NET中怎么实现分页
    这期内容当中小编将会给大家带来有关ASP.NET中怎么实现分页,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。asp.net分页代码1 ContentPager .csusing System;&...
    99+
    2023-06-17
  • 怎么用C#的CM框架实现多页面管理
    本篇内容介绍了“怎么用C#的CM框架实现多页面管理”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!传统方式后台代码:①定义集合并添加数据:pu...
    99+
    2023-06-29
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作