介绍
声明式SQL模式被认为是基于实体的视图对象的最有价值的优点之一。 在此模式下,根据UI中显示的属性在运行时生成VO的SQL。 例如,如果某个页面包含一个只有两列EmployeeId和FirstName的表,则查询将生成为“从Employees中选择Employee_ID,First_Name”。 此功能可以大大提高ADF应用程序的性能。 但是, 只读或基于SQL的视图对象呢? JDeveloper不允许您为基于SQL的VO选择SQL模式。 完全可以使用“专家”模式,而没有机会即时生成查询。 但是,一切皆有可能。
在这篇文章中,我们有一些基于SQL的视图对象VEmployees的示例:
让我们生成“视图对象定义”类:
我们将重写一些方法:
@Overridepublic boolean isRuntimeSQLGeneration(){return true;}@Overridepublic boolean isFullSql(){return false;}@Override//In our case we know exactly the clause FROMpublic String buildDefaultFrom(AttributeDef[] attrDefs,SQLBuilder builder,BaseViewCriteriaManagerImpl vcManager){return "Employees";}@Override//Setting "Selected in Query" property for each attribute except PKprotected void createDef(){for (AttributeDef at : getAttributeDefs()) if (!at.isPrimaryKey()) ((AttributeDefImpl) at).setSelected(false); }
其实就是这样! 让我们测试一下。
对于显示完整属性集的页面,我们得到结果:
并生成查询(我使用ODL分析器):
对于只有两个属性的页面,我们得到以下结果:
和查询:
本文的示例应用程序需要JDeveloper 11.1.2.1.0和标准HR模式。
参考:来自ADF实践博客的JCG合作伙伴 Eugene Fedorenko的只读ViewObject和声明性SQL模式 。
翻译自: https://www.javacodegeeks.com/2012/07/read-only-viewobject-and-declarative.html