参考网址:http://blog.youkuaiyun.com/senton/archive/2007/03/08/1524432.aspx
1.创建Query查询对象的三种方式
(1)JPQL查询
(2)命名查询(Named)
(3)本地查询(Native)
2.三种返回形式
(1)getResultList():一般返回实体集合类型:List<Customer> result=query.getResultList();
(2)getSingleResult():一般返回一个实体:Customer c=(Customer)query.getSingleResult();
若查询的不是实体,则返回对应的数据类型:Double maxAsset=(Double)query.getSingleResult();
返回的为数组:
String jpql="select c.id,c.name,c.asset,c from Customer c";
Query query=em.createQuery(jpql);
List result=query.getResultList();
for(int i=0;i<result.size();i++){
Object[] o=(Object[])result.get(i);
Integer id=(Integer)o[0];
String name=(String)o[1];
Double asset=(Double)o[2];
Customer c=(Customer)o[3];
}
。
(3)返回自定义对象。
String jpql="select new com.persia.ejb.CustomerDTO(c.id,c.name) from Customer c"; Query query=em.createQuery(jpql); List<CustomerDTO> result=query.getResultList(); for(CustomerDTO c:result){ System.out.println(c.getCustomerId()); }
(3)executeUpdate():
当为update和delete时使用,返回影响的记录数。
3.设置参数
(1)命名设置参数
Query query = entityManager.createQuery( "select o from Order o where o.id = :myId"); // 设置查询中的参数 query.setParameter( "myId", 2 ); // 可以使用多个参数 final Query query = entityManager.createQuery( "select o from Order o where o.id = :myId and o.customer = :customerName" ); // 设置查询中的参数 query.setParameter( "myId", 2 ); query.setParameter( "customerName", "foo" ); 注意不允许在同一个查询中使用两个相同名字的命名参数。
(2)位置设置参数
Query query = entityManager.createQuery( "select o from Order o where o.id = ?1"); // 设置查询中的参数 query.setParameter( 1, 2 );// 1表示第一个参数,2是参数的值 //或者 final Query query = entityManager.createQuery( "select o from Order o where o.id = ?1").setParameter( 1, 2 ); // 可以使用多个参数 final Query query = entityManager.createQuery( "select o from Order o where o.id = ?1 and o.customer = ?2" ); // 设置查询中的参数 query.setParameter( 1, 2 ); query.setParameter( 2, "foo" ); 如果在未来需要在不同的EJB3 运行环境中运行,请使用位置参数,保证应用是可移植的。