1.1. 简言
ADF实践__JDeveloper10g与JDeveloper11g
日前,本人分别在JDeveloper10g和JDeveloper11g上做了个ADF数据库应用的小DEMO.感觉10g和11g存在着比较大的差异.首先: 11g在原有功能上增加了对Ajax功能的支持,可以说功能更加强大,但在实际使用中,我觉得10g的使用性更好,更易于开发.或许是因为11g新增的功能吧,未能深入了解到.以下几点,是我在做此DEMO过程中遇到的问题。
1.2. 10g与11g问题简要汇总
1.TopLink表关系影射生成POJO对象问题
USERS表结构:
CREATE TABLE USERS ( USER_ID NUMBER(8,0) NOT NULL, USER_ROLE VARCHAR2(10) NOT NULL, EMAIL VARCHAR2(50) NOT NULL, FIRST_NAME VARCHAR2(30) NOT NULL, LAST_NAME VARCHAR2(30) NOT NULL, STREET_ADDRESS VARCHAR2(40) NOT NULL, CITY VARCHAR2(30) NOT NULL, STATE_PROVINCE VARCHAR2(25), POSTAL_CODE VARCHAR2(12), COUNTRY_ID CHAR(2) ) NOLOGGING INITRANS 1 MAXTRANS 255 STORAGE ( INITIAL 64K MINEXTENTS 1 MAXEXTENTS 2147483645);
在JDeveloper 10g中:
其通过TopLink可生成类Users.java
表字段:userId生成属性: private Integer userId;
而在JDeveloper 11g中 :
竟然是: private BigDecimal userId;
2.Create Object-Relational Map
我在用TopLink从数据表生成对象POJO时,在10g中,选择DataModel(表示了应用的数据模型,应用系统通过DataModel来执行数据访问操作。) –- New -- Business Tier – TopLink – Java Objects from Tables.
可以通过Connection下拉列表选择我们之前建立的数据库链接。
在11g中,我们通过此操作,在Connection: 下拉列表中是选不到之前建立的数据库链接的. 需要我们在Database Navigator面板中选中我们建立的数据库链接,将其拖动到Project面板中的DataModel上。这时我们才能使用之前建立的数据库链接。
个人认为: 在10g中,建立的Connection,将为所有的工程共同使用。而在11g中,数据库链接独立于所有工程,需手动将其应用于现有工程。
后表之间关系的生成机制
通过TopLink由表影射生成POJO对象.表之间的关系,在10g和11g中,TopLink的处理机制有所不同:
10g中:
private List expertiseAreasCollection; private List serviceRequestsCollection; private Integer prodId; private String name; private String image; private String description;
在11g中:
关于Products.java,其中生成的属性为:
private Collection expertiseAreasCollection; private Collection serviceRequestsCollection; private BigDecimal prodId; private String name; private String image; private String description;
注: 10g中,关于表之间影射关系(1对多,多对1,等)生成的集合类为List ,11g中,生成的集合类为Connection. List是链表,Collection是集合,比List抽象层次更高.List可以按照索引单独访问一组对象, Collection可以用foreach循环访问其中的元素, List执行效率应该比Collection更高,实际中使用List的情况应该更多.
不知道为什么11g生成的属性均为Collection?有待于进一步研究.
代码生成机制,代码格式化效果
在10g中,代码格式化效果更好,比11g智能,不知10g与11g代码格式化使用的是何插件?如何控制代码生成规则?
例,在10g中,
Public Integer getNextLineItem(){
}
方法中的{},在输入完{}后,光标停留在大括号之间,按回车键,代码格式自动整理好,如上.另起一行对其. 在11g中, 回车后,下行代码空出两个字符.
Public Integer getNextLineItem(){
}
以上可见,10g中的效果更佳.
Defining Page Flow and Navigation
将10g和11g中,关于页面Diagram和page创建过程稍有不同.此差别来源于所用视图层开发控件的变化.10g中视图层开发的组件库主要为: ADF Faces Components;
ADF Faces HTML; JSF Core; JSF HTML.
如: 10g中,在Components组件面板中选择ADF Faces Core时,可以使用控件: PanelPage。