访问 http://www.qqread.com/java/2007/11/w381046.html
更多内容请看SQL Server 索引和查询专题、Java环境安装配置、Java编程开发手册专题,或进入讨论组讨论。
在Java持久化查询语言是对EJB 查询语言(QL)的一种扩展。该查询语言允许你同时在你的应用程序的实体上执行动态和静态的查询。这个查询语言有些像 SQL。不过,它确实从 SQL中受益。Java持久化查询语言操作的是实体和实体间的关系,而不是实际的关系数据库模型。这就使得查询可以移植,不用去管底层的数据库。
查询以三种方式进行: select、update和 delete方式。 select 查询返回数据库中的实体集合。这个通常会有特定的约束,存在于一个有限的集合中。 update 查询改变一个或者多个现存的实体的属性,或者是一个实体集的属性。最后, delete语句数据库中删除一个或者多个的实体。
你可以有选择的创建查询。最为基本的方法就是简单的从实体管理器中找到一个。下面的查询例子就是使用实体管理器中现存的 createQuery 方法。
Query query = em.createQuery(queryStatement);
当你使用Query 对象后,通过使用更丰富的查询语言,你可以创建,读入,更新,删除实体。虽然 find, remove, persist, 和 merge 方法能很好的工作,但是查询对象为你提供更多的灵活性。
一、实体查找
一、实体查找
当你检索实体的时候,select 查询会应用到规范标准。下面的查询语言语句选择了 Dodgers球队所有的 player。
select c from Player c where c.team.teamName = 'Los Angeles Dodgers'
构造一个 Query实例和执行它代码如下:
Query q = em.createQuery("select c from Player c where c.team.teamName = 'Los Angeles Dodgers'"); List<Player> playerList = q.getResultList();
当然,你或许想通过设置参数来查找。你能过API实现方法,就是调用 query对象的 setParameter方法。下面的代码创建了同样的查询,并且打印结果,但此时可以让你动态的设定球队的名字:
Query q = em.createQuery("select c from Player c where c.team.teamName = :name"); q.setParameter("name", aTeamName); List<Player> playerList = q.getResultList(); for(Player p : playerList) { System.out.println(p.toString()); }
二、实体更新
一旦你检索到一个受管制的实体,无论是通过查询数据库得到的,还是通过使用find 方法得到的,更新实体就和修改实体的属性一样简单,提交已经启动的事务就可以了。举个例子,你可以通过简单的调用 player实体的setJerseyNumber 方法改变一个 player的号码。一旦你提交了事务,实体就被更新,有了新的号码。下面的例子中,所有的player都更新了他们运动衫上的球衣号码。
em.getTransaction().begin(); for(Player p : playerList) { // add 1 to each players jersey number int jersey = p.getJerseyNumber(); p.setJerseyNumber(jersey + 1); } em.getTransaction().commit();
当然,一个查询也能实现同样的功能:
Query q = em.createQuery("update Player p " + "set p.jerseyNumber = (p.jerseyNumber + 1) " + "where p.team.teamName = :name"); q.setParameter("name", aTeamName); em.getTransaction().begin(); q.executeUpdate(); em.getTransaction().commit();
三、删除实体
最后,你可以使用查询来删除实体。下面的代码就是从数据库中删除了 Anaheim Angels球队。
String aTeamName = "Anaheim Angels"; ... Query q = em.createQuery("delete from Team t " + "where t.teamName = :name"); q.setParameter("name", aTeamName); em.getTransaction().begin(); q.executeUpdate(); em.getTransaction().commit();
相关图文阅读
频道图文推荐
健 康 咨 询
时 尚 咨 询
相关专题
- SQL Server 索引和查询专题 (3328篇文章)
- Java环境安装配置 (5668篇文章)
- Java编程开发手册 (8321篇文章)
- 精通Hibernate之映射继承关系(四) (0次浏览)
- 何不将Java与.NET合二为一? (0次浏览)
- Hibernate的JNDI名称绑定分析 (0次浏览)
- 精通Hibernate之映射继承关系(一) (0次浏览)
- 精通Hibernate之映射继承关系(二) (0次浏览)
- 美国计算机教授语出惊人:Java对学生有害 (0次浏览)
- JDK 6 JRE 6 Update 4 (0次浏览)
- 三步教你改善Java代码质量 (0次浏览)
- Java语言入门 简述Java语言回收机制 (0次浏览)
- 2008年Java开发者最迫切的五个期望 (0次浏览)



