原理很简单,传入要查询的SQL 语句,得到所有数据,根据PAGE SIZE 计算ROW_NUMBER, 然后再包装一个SQL语句就可以了。但这里是用Hibernate做,所以直接实现Hibernate Dialect 方言比较好.
package com.ruijie.spl.common.dialect; /** * SQLServer2005的Dialect,主要封装2005的高效分页语句 * */ import org.hibernate.dialect.SQLServerDialect; import com.ruijie.spl.common.exception.RgsplRuntimeException; public class SQLServer2005Dialect extends SQLServerDialect { public SQLServer2005Dialect() { super(); } public String getLimitString(String querySelect, int offset, int limit) { String[] querySelects = getQuerySelects(querySelect); StringBuffer result = new StringBuffer(querySelect.length() + 100); result.append("select * from("); result.append(querySelects[0]); result.append(",row_number()over("); result.append(querySelects[2]); result.append(") as row"); result.append(querySelects[1]); result.append(") tmp where tmp.row between "); result.append(offset+1); result.append(" and "); result.append(limit); return result.toString(); } // 通过sql语句,得到相应的select、from and where、order by三条语句 private String[] getQuerySelects(String querySelect) { String[] result = new String[3]; if (querySelect.indexOf(" from ") == -1 || querySelect.indexOf(" order by ") == -1) { throw new RgsplRuntimeException("不支持不带from和order by的分页查询语句"); } String select = querySelect.substring(0, querySelect.indexOf(" from ")); // while (select.endsWith(" ")) { // select.substring(0, select.length() - 1); // } result[0] = select; result[1] = querySelect.substring(querySelect.indexOf(" from "), querySelect.indexOf(" order by ")); result[2] = querySelect.substring(querySelect.indexOf(" order by ")); return result; } public boolean supportsLimitOffset() { return true; } }
相关推荐
SQLServer2008Dialect 优化了原来的分页查询数据方法以及在生成SQL时表后增加了with(nolock)
在这个场景中,我们将探讨如何使用Hibernate与SQL Server 2005数据库进行基本的CRUD(Create、Read、Update、Delete)操作。 首先,我们需要确保引入了Hibernate的依赖库。从描述中的“Hibernate 所需要的 jar 包”...
Hibernate方言(Dialect)是Hibernate框架中的一个关键概念,它是Hibernate与特定数据库之间通信的桥梁。方言定义了如何将Hibernate的SQL语句转换为特定数据库所理解的SQL,包括列类型、约束、SQL语法等。例如,达梦...
在上面的配置中,我们使用了org.hibernate.dialect.SQLServerDialect SQL方言来生成适合SQL Server数据库的SQL语句。 下面是Hibernate支持的不同数据库的SQL方言: * DB2:org.hibernate.dialect.DB2Dialect * DB2...
- **SQL Server2005 Dialect**:针对SQL Server 2005版本的优化。 - **SQL Server2008 Dialect**:包含对SQL Server 2008特性的支持。 #### SAP DB - **SAPDB Dialect**:为SAP DB数据库提供方言支持。 #### ...
而方言(Dialect)则是Hibernate中用于适配不同数据库系统的类,它定义了SQL语法的特定实现,使得Hibernate可以正确地在不同的数据库上执行SQL语句。 达梦数据库作为国内自主研发的高性能、高安全性的数据库产品,...
hibernate3.6.0dialect.jar
MYSQL常用命令 和SQL语句(方言dialect)
达梦数据库各版本的hibernate方言包,包含版本 DmDialect-for-hibernate2.0、DmDialect-for-hibernate2.1、DmDialect-for-hibernate3.0、DmDialect-for-hibernate3.1、DmDialect-for-hibernate3.6、DmDialect-for-...
方言(Dialect)是Hibernate中的一个关键组件,它定义了如何与特定的数据库管理系统(DBMS)进行通信的规则和语法。 瀚高数据库,全称为HighGo Database,是一款源自中国的高性能、安全可靠的开源数据库系统,适用于...
* 达梦8 hibernate方言包对应版本说明 /*************************************** jar包在dialect目录下: 1. DmDialect-for-hibernate2.0.jar 对应 Jdk1.4及以上, hibernate2.0 环境 2. DmDialect-for-hibernate2.1...
- **`hibernate.dialect`**:指定数据库方言,对于SQL Server,该值通常为`org.hibernate.dialect.SQLServerDialect`。 - **`mapping`**:指定Hibernate映射文件的位置,例如`<mapping resource="com/hibernate/User...
SQLServer2008Dialect 优化了原来的分页查询数据方法以及在生成SQL时表后增加了with(nolock)
Hibernate连接SQLite配置步骤: 1、添加SQLite库: 1.1、将两个jar包:com.zy.hibernate.dialect.SQLiteDialect.jar、sqlite-jdbc-3.7.2.jar拷贝到“\WEB-INF\lib”文件夹下; 2、配置hibernate: 2.1、将...
标题 "Hibernate 连接 SQL Server 2000" 涉及到的是在Java开发中使用Hibernate ORM框架与较旧版本的SQL Server数据库(即SQL Server 2000)进行交互的知识点。以下是对这个主题的详细阐述: Hibernate是Java领域中...
南大通用GBase数据库GBase_Hibernate3.2.3_GA-Dialect_8.3.81.51_build50.1.jar
在Hibernate中,方言(Dialect)是关键组件之一,它定义了特定数据库的SQL语法和特性。达梦数据库的方言包使得Hibernate能理解并生成符合达梦数据库语法的SQL语句。在压缩包中提供的Hibernate方言包,适用于...
在Hibernate中,方言(Dialect)是用于定义特定数据库的SQL语法、特性以及限制的一个类。当Hibernate需要执行SQL操作时,它会根据所配置的方言,将ORM层的通用方法转化为具体数据库能理解的SQL语句。 "支持Access...
* `<prop key="hibernate.dialect">org.hibernate.dialect.SQLServerDialect</prop>`:指定 Hibernate 方言为 SQLServerDialect。 * `<prop key="hibernate.show_sql">true</prop>`:指定是否显示 SQL 语句。 * `...