频道直达 - 专题 - 新闻 - 技巧 - 组网 - 开发 - 安全 - web编程 - 图像 - 操作系统 - 数据库 - 教育 - 旅游 - 健康 - 时尚 - 驱动 - 软件 - 游戏 - 多媒体 - ERP - 讨论组

JPA重整ORM山河

来源:IT168 作者:它山 出处:巧巧读书 2007-10-05 进入讨论组
上一页 1 2 3 4 5 6 7 下一页 

Query 

JPA使用javax.persistence.Query接口代表一个查询实例,Query实例由EntityManager通过指定查询语句构建。该接口拥有众多执行数据查询的接口方法: 

◆Object getSingleResult():执行SELECT查询语句,并返回一个结果;

◆List getResultList() :执行SELECT查询语句,并返回多个结果;

◆Query setParameter(int position, Object value):通过参数位置号绑定查询语句中的参数,如果查询语句使用了命令参数,则可以使用Query setParameter(String name, Object value)方法绑定命名参数;

◆Query setMaxResults(int maxResult):设置返回的最大结果数; 

◆int executeUpdate():如果查询语句是新增、删除或更改的语句,通过该方法执行更新操作;

6.JPA的查询语言

JPA的查询语言是面向对象而非面向数据库的,它以面向对象的自然语法构造查询语句,可以看成是Hibernate HQL的等价物。 

简单的查询 

你可以使用以下语句返回所有Topic对象的记录: 

SELECT t FROM Topic t 

t表示Topic的别名,在Topic t是Topic AS t的缩写。 

如果需要按条件查询Topic,我们可以使用: 

SELECT DISTINCT t FROM Topic t WHERE t.topicTitle = ?1 

通过WHERE指定查询条件,?1表示用位置标识参数,尔后,我们可以通过Query的setParameter(1, "主题1")绑定参数。而DISTINCT表示过滤掉重复的数据。 

如果需要以命名绑定绑定数据,可以改成以下的方式:

SELECT DISTINCT t FROM Topic t WHERE t.topicTitle = :title 

这时,需要通过Query的setParameter("title", "主题1")绑定参数。 

关联查询:从One的一方关联到Many的一方 

返回PollOptions对应的PollTopic对象,可以使用以下语句: 

SELECT DISTINCT p FROM PollTopic p, IN(p.options) o WHERE o.optionItem LIKE ?1 

这个语法和SQL以及HQL都有很大的区别,它直接实体属性连接关联的实体,这里我们通过PollTopic的options属性关联到PollOption实体上,对应的SQL语句为: 

SELECT DISTINCT t0.TOPIC_ID, t0.TOPIC_TYPE, t0.TOPIC_TITLE,

t0.TOPIC_TIME, t0.TOPIC_VIEWS, t0.MULTIPLE, t0.MAX_CHOICES FROM T_TOPIC t0,

T_POLL_OPTION t1 WHERE (((t1.OPTION_ITEM LIKE ?) AND (t0.TOPIC_TYPE = ?))

AND (t1.TOPIC_ID = t0.TOPIC_ID)) 

该查询语句的另外两种等价的写法分别是: 

SELECT DISTINCT p FROM PollTopic p JOIN p.options o WHERE o.optionItem LIKE ?1

SELECT DISTINCT p FROM PollTopic p WHERE p.options.optionItem LIKE ?1 

关联查询:从Many的一方关联到One的一方 

从Many一方关联到One一方的查询语句和前面所讲的也很相似。如我们希望查询某一个调查主题下的所示调查项,则可以编写以下的查询语句: 

SELECT p FROM PollOption p JOIN p.pollTopic t WHERE t.topicId = :topicId

对应的SQL语句为:

SELECT t0.OPTION_ID, t0.OPTION_ITEM, t0.TOPIC_ID FROM T_POLL_OPTION t0,

TOPIC t1 WHERE ((t1.TOPIC_ID = ?)

AND ((t1.TOPIC_ID = t0.TOPIC_ID) AND (t1.TOPIC_TYPE = ?))) 

使用其它的关系操作符 

使用空值比较符,比如查询附件不空的所有帖子对象: 

SELECT p FROM Post p WHERE p.postAttach IS NOT NULL 

范围比较符包括BETWEEN..AND和>、>= 、<、<=、<>这些操作符。比如下面的语句查询浏览次数在100到200之间的所有论坛主题: 

SELECT t FROM Topic t WHERE t.topicViews BETWEEN 100 AND 200 

图 文 结 合:http://www.qqread.com/java/2007/03/w300113.html进入讨论组讨论。
上一页 1 2 3 4 5 6 7 下一页 
收藏此文】【 】【打印】【关闭
相关图文阅读
频道图文推荐
健 康 咨 询
时 尚 咨 询
巧巧读书宗旨
相关专题
讨论组问题推荐
站内各频道最新更新文档
站内最新制作专题
热门关键字导读
Photoshop教 程照片处理 照片制作 PS快捷键 抠图
计 算 机 故 障XP系统修复
艺 术 与 设 计设计 流媒体 设计欣赏 边框
计 算 机 安 全ARP
站内频道文章精选
巧巧电脑频道编辑信箱  告诉我们您想看的专题或文章