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接口部分。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值