gembin

OSGi, Eclipse Equinox, ECF, Virgo, Gemini, Apache Felix, Karaf, Aires, Camel, Eclipse RCP

HBase, Hadoop, ZooKeeper, Cassandra

Flex4, AS3, Swiz framework, GraniteDS, BlazeDS etc.

There is nothing that software can't fix. Unfortunately, there is also nothing that software can't completely fuck up. That gap is called talent.

About Me

 

JPA查询

1.查询所有信息
Query q = em.createQuery("select u from Userinfo u");
List list =q.getResultList();
如果查询结果是多个,应该使用Query接口的getResultList方法,如果查询结果只有一个,可以使用Query接口的getSingleResult方法。
命名查询:
@NamedQuery(name = "findAllUser", query = "SELECT u FROM Userinfo u")
name表示该查询的名字,query是查询语句本身。命名查询可以写在实体类中,第一次课生成的实体类中就有多个命名查询。
对于命名查询可以使用EntityManager的createNamedQuery方法,要访问上面的查询可以使用下面的代码:
Query q = em.createNamedQuery("findAllUser");
List<Userinfo> list =q.getResultList();
createNamedQuery方法的参数命名查询的名字。
2.使用Query完成分页
分页显示就是每次只显示部分对象的信息。要显示哪一部分信息取决于从什么地方开始显示,显示到什么地方。Query接口可以控制要获取的记录,有两个方法来设置要获取的第一条记录和最后一条记录。两个方法的定义分别如下:
setMaxResults(int maxResult),参数是要查询的最大记录数。
setFirstResult(int startposition),参数是第一个要查询的记录的位置。
通过这两个属性完成分页显示。
注意:分页必须用apache-openjpa-1.0.2-binary.zip , 1.0.1不起作用是个Bug
3.条件查询
条件查询,需要在查询语句中使用变量,可以有两种方式:位置参数和名字参数。
位置参数
在位置参数中,使用“?”号加上参数的序号的方式表示参数。
例,根据用户名username查询用户。
SELECT u FROM Userinfo u where u.username = ?1
1表示第一个参数。
在位置参数中,可以使用多个参数,可以用不同的数字表示。同一个参数可以在查询中出现多次。
名字参数
在名字参数种,使用“:”号加上参数的名字的方式表示参数。
例,根据用户类型查询用户。
SELECT u FROM Userinfo u WHERE u.usertype = :usertype
“:”号后面的usertype就是参数的名字。
不管是位置参数还是名字参数都可以在命名查询中使用。
位置参数的赋值通过Query接口的相应方法完成,主要方法如下:
public Query setParameter(int position,Object value)
public Query setParameter(int position,Date value,TemporalType temporalType)
public Query setParameter(int position,Calendar value,TemporalType temporalType)
用于名字参数的赋值方法基本相同,只是第一个参数用于指定参数的名字。主要方法如下:
public Query setParameter(String name,Object value)
public Query setParameter(String name,Date value,TemporalType temporalType)
public Query setParameter(String name,Calendar value,TemporalType temporalType)
例1:使用前面介绍的根据用户名进行查询的语句。
Query q = em.createQuery("SELECT u FROM Userinfo u where u.username = ?1");
q = q.setParameter(1,username);
List<Userinfo> list =q.getResultList();
例2:使用前面介绍的根据用户类型进行查询的语句。
Query q = em.createQuery("SELECT u FROM Userinfo u WHERE u.usertype = :usertype");
q = q.setParameter("usertype",usertype);
List<Userinfo> list =q.getResultList();
 Query接口的方法参考书上370页Query接口部分。关于EntityManager接口的方法参考书上358页EntityManager接口部分。

posted on 2008-03-20 01:50 gembin 阅读(2550) 评论(0)  编辑  收藏 所属分类: JavaEE


只有注册用户登录后才能发表评论。


网站导航:
 

导航

统计

常用链接

留言簿(6)

随笔分类(440)

随笔档案(378)

文章档案(6)

新闻档案(1)

相册

收藏夹(9)

Adobe

Android

AS3

Blog-Links

Build

Design Pattern

Eclipse

Favorite Links

Flickr

Game Dev

HBase

Identity Management

IT resources

JEE

Language

OpenID

OSGi

SOA

Version Control

最新随笔

搜索

积分与排名

最新评论

阅读排行榜

评论排行榜

free counters