`

封装 sqlserver2005 以上的 hibernate 方言 Dialect

阅读更多

原理很简单,传入要查询的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;
    }

}

 

分享到:
评论

相关推荐

    hibernate SQLServer2008Dialect

    SQLServer2008Dialect 优化了原来的分页查询数据方法以及在生成SQL时表后增加了with(nolock)

    使用hibernate对sqlserver 2005进行增删改查

    在这个场景中,我们将探讨如何使用Hibernate与SQL Server 2005数据库进行基本的CRUD(Create、Read、Update、Delete)操作。 首先,我们需要确保引入了Hibernate的依赖库。从描述中的“Hibernate 所需要的 jar 包”...

    达梦Hibernate方言2.0至4.0

    Hibernate方言(Dialect)是Hibernate框架中的一个关键概念,它是Hibernate与特定数据库之间通信的桥梁。方言定义了如何将Hibernate的SQL语句转换为特定数据库所理解的SQL,包括列类型、约束、SQL语法等。例如,达梦...

    Hibernate不同数据库的连接及SQL方言

    在上面的配置中,我们使用了org.hibernate.dialect.SQLServerDialect SQL方言来生成适合SQL Server数据库的SQL语句。 下面是Hibernate支持的不同数据库的SQL方言: * DB2:org.hibernate.dialect.DB2Dialect * DB2...

    hibernate中所有数据库方言

    - **SQL Server2005 Dialect**:针对SQL Server 2005版本的优化。 - **SQL Server2008 Dialect**:包含对SQL Server 2008特性的支持。 #### SAP DB - **SAPDB Dialect**:为SAP DB数据库提供方言支持。 #### ...

    达梦 Hibernate 方言 2.0 至 4.0

    而方言(Dialect)则是Hibernate中用于适配不同数据库系统的类,它定义了SQL语法的特定实现,使得Hibernate可以正确地在不同的数据库上执行SQL语句。 达梦数据库作为国内自主研发的高性能、高安全性的数据库产品,...

    hibernate3.6.0dialect.jar

    hibernate3.6.0dialect.jar

    MYSQL常用命令 和SQL语句(方言dialect)

    MYSQL常用命令 和SQL语句(方言dialect)

    达梦数据库hibernate方言包

    达梦数据库各版本的hibernate方言包,包含版本 DmDialect-for-hibernate2.0、DmDialect-for-hibernate2.1、DmDialect-for-hibernate3.0、DmDialect-for-hibernate3.1、DmDialect-for-hibernate3.6、DmDialect-for-...

    瀚高数据库hibernate方言 hgdb-hibernate-dialect

    方言(Dialect)是Hibernate中的一个关键组件,它定义了如何与特定的数据库管理系统(DBMS)进行通信的规则和语法。 瀚高数据库,全称为HighGo Database,是一款源自中国的高性能、安全可靠的开源数据库系统,适用于...

    达梦数据库java驱动包、hibernate方言包

    * 达梦8 hibernate方言包对应版本说明 /*************************************** jar包在dialect目录下: 1. DmDialect-for-hibernate2.0.jar 对应 Jdk1.4及以上, hibernate2.0 环境 2. DmDialect-for-hibernate2.1...

    sqlserver以及mysql hibernate xml映射语句

    - **`hibernate.dialect`**:指定数据库方言,对于SQL Server,该值通常为`org.hibernate.dialect.SQLServerDialect`。 - **`mapping`**:指定Hibernate映射文件的位置,例如`<mapping resource="com/hibernate/User...

    SQLServer2008Dialect

    SQLServer2008Dialect 优化了原来的分页查询数据方法以及在生成SQL时表后增加了with(nolock)

    Hibernate连接SQLite配置说明和方言代码

    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 连接sqlserver2000

    标题 "Hibernate 连接 SQL Server 2000" 涉及到的是在Java开发中使用Hibernate ORM框架与较旧版本的SQL Server数据库(即SQL Server 2000)进行交互的知识点。以下是对这个主题的详细阐述: Hibernate是Java领域中...

    GBase_Hibernate3.2.3_GA-Dialect_8.3.81.51_build50.1.jar

    南大通用GBase数据库GBase_Hibernate3.2.3_GA-Dialect_8.3.81.51_build50.1.jar

    达梦数据库7.6最新的驱动包及hibernate方言包

    在Hibernate中,方言(Dialect)是关键组件之一,它定义了特定数据库的SQL语法和特性。达梦数据库的方言包使得Hibernate能理解并生成符合达梦数据库语法的SQL语句。在压缩包中提供的Hibernate方言包,适用于...

    hibernate方言

    在Hibernate中,方言(Dialect)是用于定义特定数据库的SQL语法、特性以及限制的一个类。当Hibernate需要执行SQL操作时,它会根据所配置的方言,将ORM层的通用方法转化为具体数据库能理解的SQL语句。 "支持Access...

    sqlserver数据库SSH配置1

    * `<prop key="hibernate.dialect">org.hibernate.dialect.SQLServerDialect</prop>`:指定 Hibernate 方言为 SQLServerDialect。 * `<prop key="hibernate.show_sql">true</prop>`:指定是否显示 SQL 语句。 * `...

Global site tag (gtag.js) - Google Analytics