您的位置:首页 > 移动开发 > Objective-C

集合中的不再是Order,而是一个Object[]对象数组

2007-11-17 17:16 113 查看
vartixa_bad_mm_flag=true;
vartixa_nadInIframe=false;
vartixa_nadRowCount=1;
vartixa_nadColumnCount=2;
vartixa_nadHeight=90
vartixa_nadWidth=428;
vartixa_nadBorderColor="F5FAFE";
vartixa_nadBgColor="F5FAFE";
vartixa_nadTitleColor="E1771E";
vartixa_nadDescColor="333333";
vartixa_nadUrlColor="000000";
vartixa_nadLineHeight=18;
vartixa_nadFontSize=14;
vartixa_adType="text";

orderbyo.address.streetNumberdesc");//desc为降序

finalQueryquery=entityManager.createQuery("selectofromOrderoorderbyo.id,o.address.streetNumber");


查询部分属性

在前面的例子中,都是对针对Entity类的查询,返回的也是被查询的Entity类的实体。EJB3QL也允许我们直接查询返回我们需要的属性,而不是返回整个Entity。在一些Entity中属性特别多的情况,这样的查询可以提高性能。

//直接查询我们感兴趣的属性(列)

finalQueryquery=entityManager.createQuery("selecto.id,o.customerName,o.address.streetNumberfromOrderoorderbyo.id");

//集合中的不再是Order,而是一个Object[]对象数组

finalListresult=query.getResultList();

//第一个行

Object[]row=result.get(0);

//数组中的第一个值是id

intid=Integer.parseInt(row[0].toString());

StringcustomerName=row[1].toString();

StringstreetNumber=Integer.parseInt(row[2].toString());


查询中使用构造器(Constructor)

EJB3QL支持将查询的属性结果直接作为一个javaclass的构造器参数,并产生实体作为结果返回。

//我们把需要的三个属性作为一个class(OrderHolder)的构造器参数,并使用new函数。

Queryquery=entityManager.createQuery("selectnewcom.redsoft.ejb3.dummy.OrderHolder(o.id,o.vender,o.partNumber)FROMOrderASo");

//集合中的结果是OrderHolder

Listresult=query.getResultList();

该javaclass不需要是EntityClass。NEW要求javaclass使用全名。

聚合查询(Aggregation)

象大部分的SQL一样,EJB3QL也支持查询中的聚合函数。目前EJBQL支持的聚合函数包括:

AVG

SUM

COUNT

MAX

MIN

finalQueryquery=entityManager.createQuery("selectMAX(o.id)fromOrderwhereo.customerName='foo'");

//如果我们知道结果是单个,我们可以用getSingleResult()获得结果

finalObjectresult=query.getSingleResult();

//由于Order中id的类型为long,

finalLongmax=(Long)result;

//在一些数据库中max函数返回的结果的类型不一定于id对应的列的类型相符,更安全的方式可以采用string来转型

finalongmax=Long.parseLong(result.toString());

聚合函数也可以作为被查询的一个属性返回。

//返回所有的订单的生产厂商和他们的订单价值总额finalQueryquery

=entityManager.createQuery("selecto.vender,sum(o.amount)FROMOrdero groupbyo.vender");");

和SQL一样,如果聚合函数不是select...from的唯一一个返回列,需要使用"GROUPBY"语句。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐