`
czpae86
  • 浏览: 720146 次
  • 性别: Icon_minigender_1
  • 来自: 广州
社区版块
存档分类
最新评论

关于 hibernate 查询中实现order by的 NULLS LAST 和 NULLS FIRST

阅读更多

关于 hibernate 查询中实现order by的 NULLS LAST 和 NULLS FIRST

 

1:创建一个CustomNullsFirstInterceptor类

 

public class CustomNullsFirstInterceptor extends EmptyInterceptor {
    private static final long serialVersionUID = -3156853534261313031L;

    private static final String ORDER_BY_TOKEN = "order by";

    public String onPrepareStatement(String sql) {

        int orderByStart = sql.toLowerCase().indexOf(ORDER_BY_TOKEN);
        if (orderByStart == -1) {
            return super.onPrepareStatement(sql);
        }
        orderByStart += ORDER_BY_TOKEN.length() + 1;
        int orderByEnd = sql.indexOf(")", orderByStart);
        if (orderByEnd == -1) {
            orderByEnd = sql.indexOf(" UNION ", orderByStart);
            if (orderByEnd == -1) {
                orderByEnd = sql.length();
            }
        }
        String orderByContent = sql.substring(orderByStart, orderByEnd);
        String[] orderByNames = orderByContent.split("\\,");
        for (int i=0; i<orderByNames.length; i++) {
            if (orderByNames[i].trim().length() > 0) {
                if (orderByNames[i].trim().toLowerCase().endsWith("desc")) {
                    orderByNames[i] += " NULLS LAST";
                } else {
                    orderByNames[i] += " NULLS FIRST";
                }
            }
        }
        orderByContent = StringUtils.join(orderByNames, ",");
        sql = sql.substring(0, orderByStart) + orderByContent + sql.substring(orderByEnd);
        return super.onPrepareStatement(sql);
    }

}
 

 

 

2:加入配置

<bean id="sessionFactory"
		class="org.springframework.orm.hibernate3.annotation.AnnotationSessionFactoryBean">
		<property name="dataSource" ref="dataSource" />
		<property name="packagesToScan">
			<list>
				<value>com.skywin.law.workflow.domain</value>
				<!--<value>com.skywin.common.fileupload.domain</value>-->
				<value>com.skywin.common.domain</value>
				<value>com.skywin.chat.domain</value>
				<value>com.skywin.law.assistflow.domain</value>
			</list>
		</property>
		<property name="mappingResources" ref="sessionFactoryMappingResources"></property>
		<property name="hibernateProperties">
			<props>

				<prop key="hibernate.dialect">${hibernate.dialect}</prop>
				<prop key="hibernate.cache.use_second_level_cache">true</prop>
				<!-- <prop key="hibernate.cache.provider_configuration_file_resource_path">diss-override-ehcache.xml</prop> -->
				<prop key="hibernate.cache.region.factory_class">net.sf.ehcache.hibernate.EhCacheRegionFactory</prop>
				<!-- <prop key="hibernate.cache.provider_class">org.hibernate.cache.EhCacheProvider</prop> -->
				
				<prop key="hibernate.cache.use_query_cache">true</prop>
				<prop key="hibernate.show_sql">true</prop>
			 <!-- <prop key="hibernate.hbm2ddl.auto">update</prop> -->
				<prop key="hibernate.format_sql">true</prop>
				<prop key="hibernate.jdbc.batch_size">0</prop>
			    <prop key="hibernate.hbm2ddl.import_files">import-install.sql</prop>
			</props>
		</property>
		
		<property name="entityCacheStrategies">
				<props>
					<prop key="org.jbpm.pvm.internal.task.TaskImpl">read-write</prop>
				</props>
		</property>
		
		<property name="entityInterceptor">

		<bean id ="customNullsFirstInterceptor" class="com.skywin.common.hibernate3.CustomNullsFirstInterceptor" />
		
		</property>


	</bean>
 
分享到:
评论

相关推荐

    rust-sortStringToSql:锈版。 将排序表达式转换为可在 'ORDER BY' 语句中使用的 SQL,例如 '-aired,id' -> 'aird DESC NULLS LAST, id ASC NULLS LAST'

    将字符串排序为 SQL 这是一个 rust crate,用于将“排序表达式”转换为可在“ORDER BY”中使用的 SQL 表达式。 例如, -date,id将转换为date DESC NULLS LAST, id ASC NULLS LAST 。 它可用于将 HTTP 查询参数转换...

    oracle使用order by排序null值如何处理

    适用情况: oracle 对查询结果进行排序时,被排序的栏位存在null值,且要指定NULL值排在最前面或者最后面 关键字:Nulls First;Nulls Last 默认情况:null 默认为最大值(即:asc 升序&lt;小–&gt;大&gt;,null值排在最后...

    oralce 中 排序问题

    ORDER BY last_name NULLS LAST, first_name ASC; ``` 在这个例子中,如果`last_name`为空,那么这些记录将在非空的`last_name`记录之后显示,而`first_name`则按升序排列。 总之,Oracle中的排序是一个涉及广泛的...

    oracle排序

    SELECT * FROM perexl ORDER BY danwei DESC NULLS LAST; 十一、使用 DECODE 函数对 NULL 值进行处理 在 Oracle 中,可以使用 DECODE 函数对 NULL 值进行处理。例如,以下语句将对 perexl 表中的数据按照 danwei ...

    对Oracle 排序中的几种常用排序的介绍

    8. **分页查询**:Oracle中通常使用`ROWNUM`进行分页,但要注意`ORDER BY`和`ROWNUM`的配合使用。如果先`ORDER BY`再用`ROWNUM`,可能会导致分页结果不正确。正确的做法是: ```sql select * from ( select ...

    oracle处理的类型 oracle行排序

    SELECT * FROM table_name ORDER BY column_name NULLS FIRST/LAST; ``` Oracle还支持多列排序,可以同时按照多个列进行排序,先按第一列排序,再按第二列排序,以此类推。例如: ```sql SELECT * FROM table_name...

    sql 语句大全sql教程

    NULLS FIRST`和`ORDER BY ... NULLS LAST`可以让空值出现在排序的前面或后面。在示例中,`NULLS LAST`确保空值不会打乱其他非空值的顺序,而`NULLS FIRST`则让空值排在最前。 5. **根据数据项的键排序**:`CASE`...

    Oracle开发之分析函数(Top/Bottom N、First/Last、NTile)

    通过在`ORDER BY`子句中使用`NULLS LAST/FIRST`,我们可以指定空值是排在最后还是最前。例如: ```sql SELECT region_id, customer_id, SUM(customer_sales) cust_total, RANK() OVER (PARTITION BY region_id ...

    Struts+Hibernate的一个好用分页实例

    本文介绍了一种基于Struts和Hibernate实现高效分页的方法,特别是在数据库不支持分页查询的情况下。通过自定义存储过程`Ture_Page`以及正确的Hibernate配置,可以显著提高系统性能,优化用户体验。这种方法不仅适用...

    (开发人员应当读的文章)Bob Lyle 谈 DB2 中的 OLAP 函数

    这里使用`PARTITION BY dept`来定义每个部门为一个独立的分区,`ORDER BY salary DESC NULLS LAST`则指定了在每个部门内部按照薪水降序排列,并将空值排在最后。 #### 五、输出结果示例 输出结果展示了每个员工的...

    list_nulls.rar_Over

    在提供的`list_nulls.c`文件中,我们可能找到具体的实现细节,例如如何定义`hlist`结构体,如何初始化链表,以及如何遍历并处理空节点。这可能包括对特定宏的使用,比如Linux内核中的`hlist_for_each_entry`或`hlist...

    Oracle_SQL学习笔记

    4. **ORDER BY NULLS LAST**:在排序时,`NULLS LAST`选项确保NULL值在排序结果的最后出现,如`ORDER BY area_code, bill_month NULLS LAST`。 5. **NVL 函数家族**:NVL函数用于处理NULL值。`NVL(a,1)`当a为NULL时...

    Oracle_SQL学习笔记.doc

    4. **ORDER BY 子句中的 NULLS LAST**:在`ORDER BY`子句中,`NULLS LAST`选项确保`NULL`值在排序时出现在最后,例如`ORDER BY area_code, bill_month NULLS LAST`。 5. **NVL 函数家族**: - `NVL(a, b)`:如果`a...

    nulls_for_goals

    nulls_for_goals

    oracle 分析函数总结

    Order子句则用于定义行的排序,可以包含ASC或DESC关键字,以及NULLS FIRST或NULLS LAST选项来控制NULL值的位置。Window子句更为复杂,它定义了分析函数的工作范围,可以基于行数(ROWS BETWEEN)或值范围(RANGE ...

    ORACLE OLAP函数语法的总结

    DENSE_RANK() OVER (PARTITION BY deptno ORDER BY sal DESC NULLS LAST) AS dense_rank, ROW_NUMBER() OVER (PARTITION BY deptno ORDER BY sal DESC NULLS LAST) AS row_number FROM emp; ``` - **RANK()**:为...

    分析函数详解

    - **语法**:`RANK() OVER (PARTITION BY &lt;partition_by_clause&gt; ORDER BY &lt;order_by_clause&gt; NULLS { FIRST | LAST })` - `PARTITION BY`子句用于将数据集分成多个分区,在每个分区内进行排名。 - `ORDER BY`子句...

    Oracle数据库中对null值的排序及mull与空字符串的区别

    在Oracle数据库中,对null值的排序以及null与空字符串的区别是数据库操作中常见的问题,尤其是在数据查询和分析时。Oracle规定,在`ORDER BY`语句执行排序时,默认情况下null被视为最大值。这意味着在升序(ASC)...

Global site tag (gtag.js) - Google Analytics