Oracle ADF VO排序及VO的查询模式
常规应用中,当需要使用Table向终端用户展示数据时,Table中数据的显示排序一致性极大程度的影响到了客户体验。通常希望诸如多次查询结果显示顺序相同、插入数据在原数据上方等的实现。
ADF为开发人员提供了两种级别的排序,即数据库级别的排序及内存级别(In-Memory)的排序。需要同时使用这两种排序法,才能取得合适的排序效果。
(使用Oracle示例数据库HR中的Employees表作为示例)
- 数据源排序
编辑VO的Query,设置Order by字段,这里设置Manager作为排序字段需要注意的是,这里的排序只是针对从数据源选取数据时的排序,当对VO进行插入/删除操作时,修改并不会立即Commit至数据库,而是存储在EO/VO中,这就导致这种排序法对于不在数据库中存在实体行的数据是无效的,也是需要使用In-Memory排序方式的原因。 - VO的查询模式(View Object's SQL Mode)
在开始VO的In-Memory排序之前,首先应该了解VO的查询模式。
ADF中一个VO具有如下查询模式- ViewObject.QUERY_MODE_SCAN_DATABASE_TABLES
VO的默认查询模式,该模式下VO每次executeQuery时会从数据库检索数据 - ViewObject.QUERY_MODE_SCAN_VIEW_ROWS
检索已经存在于VO的Row set中的数据,允许在此查询模式下使用VO的In-Memory Filtering - ViewObject.QUERY_MODE_SCAN_ENTITY_ROWS
检索存储于EO缓存中的数据
可以使用setQueryMode()方法进行VO查询模式的设置。可以单独设置一个查询模式或使用Java的OR(|)设置多个查询模式。例如
setQueryMode(ViewObject.QUERY_MODE_SCAN_DATABASE_TABLES | ViewObject.QUERY_MODE_SCAN_ENTITY_ROWS)
当设置多个查询模式时,会自动跳过重复行。
设置过查询模式后,当执行executeQuery()方法时,查询模式的设置即可生效。 - ViewObject.QUERY_MODE_SCAN_DATABASE_TABLES
- In-Mamory排序
使用setSortBy()方法进行针对VO的运行时In-Memory排序。setSortBy()方法的输入参数类似于SQL中的order by子句,不同的是将列名称替换为VO上的Attribute Name。例如setSortBy("ManagerId desc, EmployeeId");根据查询模式的设置不同,当执行executeQuery()时,setSortBy()会自动转换为相应的排序方法。如当使用数据库检索时,会将setSortBy转换为ORDER BY子句,当使用In-Memory查询时,会将setSortBy转换为SortCriteria对象。
使用示例:vo.setSortBy("ManagerId");
vo.setQueryMode(ViewObject.QUERY_MODE_SCAN_VIEW_ROWS);
vo.executeQuery();只需要在如插入数据时执行该语句,即可完成In-Memory的排序功能。
- 自定义VO的排序方法
当需要的排序方法比较复杂,使用setSortBy设置排序规则无法满足需求时,可以通过重写VO的public void sortRows(Row[] rows)方法和public Comparator getRowComparator()方法达成目的。其中sortRows方法即是进行In-Memory排序时执行的排序方法;getRowComparater方法返回一个Comparator类型对象,被VO的compareTo()方法调用。
- 转载自:http://blog.csdn.net/ice_cuijin/article/details/16842401
程序员的基础教程:菜鸟程序员
Oracle ADF VO排序及VO的查询模式的更多相关文章
- 对于Oracle中分页排序查询语句执行效率的比较分析
转自:http://bbs.csdn.net/topics/370033478 对于Oracle中分页排序查询语句执行效率的比较分析 作者:lzgame 在工作中我们经常遇到需要在Oracle中进行分 ...
- Oracle创建用户并给用户授权查询指定表或视图的权限
MSV31账户登录数据库进行如下操作: CREATE USER NORTHBOUND IDENTIFIED BY NORTHBOUND DEFAULT TABLESPACE "TBS_DN ...
- Oracle笔记(六) 多表查询
最近看了李兴华的oracle视频,这是网上别人做的笔记非常细致,分享给大家,第六篇 原创地址:http://www.cnblogs.com/mchina/archive/2012/09/07/2651 ...
- Oracle rownum 分页, 排序
Oracle rownum 分页, 排序 什么是rownum, rownum的生成, rownum相关的符号操作 Rownum是oracle生成结果集时得到的一个伪列, 按照读出行的顺序, 第一条ro ...
- 转://Oracle A用户给B用户授权查询指定表或视图权限方案
用DNINMSV31账户登录数据库进行如下操作: CREATE USER NORTHBOUND IDENTIFIED BY NORTHBOUND DEFAULT TABLESPACE "TB ...
- Oracle、MySql、SQLServer数据分页查询
看过此博文后Oracle.MySql.SQLServer 数据分页查询,在根据公司的RegionRes表格做出了 SQLserver的分页查询语句: 别名.字段 FROM( SELECT row_nu ...
- ERP_基于Oracle ADF的定制化企业级IT系统解决方案
2014-12-31 Created By BaoXinjian
- 基于Oracle ADF的应用程序开发
ADF简介 ADF(Application Development Framework)是Oracle公司为简化J2EE程序开发的复杂性专门开发的一种解决方案,ADF通过减少实现设计模式和应用程序框架 ...
- Oracle ADF 开发必读
MARK:http://www.oracle.com/technetwork/cn/articles/adf/index-086064-zhs.html 第 1 部分- 借助 Subversion 进 ...
随机推荐
- ehci ohci 驱动逻辑
1. EHCI ehci_platform_probe: platform_get_irq usb_hcd_request_irqs usb_hcd_irq 使用的是ehci的irq hcd-> ...
- 【转】ubuntu 12.04 下 Vim 插件 YouCompleteMe 的安装
原文网址:http://www.cnblogs.com/jostree/p/4137402.html 作者:jostree 转载请注明出处 http://www.cnblogs.com/jostree ...
- redhat 防火墙禁止允许的IP链接指定的端口
编辑:iptables -A RH-Firewall-1-INPUT -m state --state NEW -m tcp -p tcp -s 192.168.4.3 --dport 80 -j A ...
- Linux vnc服务器操作(启动/停止/重起/自启动)
8.启动和停止VNC服务1)启动VNC服务命令[root@testdb ~]# /etc/init.d/vncserver startStarting VNC server: 1:rootNew 't ...
- 【python】使用HTMLParser、cookielib抓取和解析网页、从HTML文档中提取链接、图像、文本、Cookies
一.从HTML文档中提取链接 模块HTMLParser,该模块使我们能够根据HTML文档中的标签来简洁.高效地解析HTML文档. 处理HTML文档的时候,我们常常需要从其中提取出所有的链接.使用HTM ...
- 修改Gradle 和Maven本地仓库的位置方法
本文转载自:https://www.cnblogs.com/dwb91/p/6523541.html 关于Maven的配置: 用过Maven的开发人员应该知道Maven可以通过配置 conf文件夹下面 ...
- Java renameTo()重新命名此抽象路径名表示的文件
Java手册 renameTo public boolean renameTo(File dest) 重新命名此抽象路径名表示的文件. 此方法行为的许多方面都是与平台有关的:重命名操作无法将一个文件从 ...
- LeetCode 177. Nth Highest Salary
https://leetcode.com/problems/nth-highest-salary/description/ Write a SQL query to get the nth highe ...
- logger5步走
https://www.cnblogs.com/GGGGGGZX/p/9114378.html'''打印日志11/26/2017 10:44:21 PM bug 24 并写入文件example.log ...
- 全面解析python类的绑定方法与非绑定方法
类中的方法有两类: 绑定方法 非绑定方法 一.绑定方法 1.对象的绑定方法 首先我们明确一个知识点,凡是类中的方法或函数,默认情况下都是绑定给对象使用的.下面,我们通过实例,来慢慢解析绑定方法的应用. ...