介绍
声明式SQL模式被认为是基于实体的视图对象的最有价值的优点之一。
在此模式下,根据UI中显示的属性在运行时生成VO的SQL。
例如,如果某个页面包含一个只有两列EmployeeId和FirstName的表,则查询将生成为“从Employees中选择Employee_ID,First_Name”。
此功能可以大大提高ADF应用程序的性能。
但是, 只读或基于SQL的视图对象呢?
JDeveloper不允许您为基于SQL的VO选择SQL模式。
完全可以使用“专家”模式,而没有机会即时生成查询。
但是,一切皆有可能。
在这篇文章中,我们有一些基于SQL的视图对象VEmployees的示例:
让我们生成“视图对象定义”类:
我们将重写一些方法:
@Override
public boolean isRuntimeSQLGeneration()
{
return true;
}
@Override
public boolean isFullSql()
{
return false;
}
@Override
//In our case we know exactly the clause FROM
public String buildDefaultFrom(AttributeDef[] attrDefs,
SQLBuilder builder,
BaseViewCriteriaManagerImpl vcManager)
{
return "Employees";
}
@Override
//Setting "Selected in Query" property for each attribute except PK
protected 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