件的对象列表,需要借助 Query 接口和 JPQL。Query 接口可以直接通过 EntityManager 的 createQuery 方法获得。 Query 对象目前支持 JPQL 和原生态 SQL 两种方式。
JPQL 是 OpenJPA 中支持的对象查询语言,是 EJB SQL 的一种实现。通过 JPQL,我们可以用一种面向对象的方式编写持久化对象的查询条件。比如要查找 编号为“1”的 Animal 对象,我们可以使用下面的 JPQL 语法:
select animal form Animal animal where animal.id=1)
关于 JPQL 的更多信息请参考 OpenJPA 的帮助文档。Query 接口和 JPQL 的 实际例子请参考 清单 4 AnimalDAOImpl.java 中的源代码。
清单 4 中列出了如何使用 OpenJPA 操作、查找持久化对象 Animal 的源代码 ,读者可以从中了解使用 OpenJPA 时所应该完成的步骤和方法。
清单 4 AnimalDAOImpl.java
1. package org.vivianj.openjpa.impl.ejb3;
2.
3. import java.util.List;
4.
5. import javax.persistence.EntityManager;
6. import javax.persistence.EntityManagerFactory;
7. import javax.persistence.Persistence;
8. import javax.persistence.Query;
9.
10. import org.vivianj.openjpa.dao.AnimalDAO;
11. import org.vivianj.openjpa.entity.Animal;
12.
13. /**
14. * AnimalDAOImpl 演示了如何使用OpenJPA访问数据库的方法和步骤
15. *
16. */
17. public class AnimalDAOImpl implements AnimalDAO {
18.
19. /**
20. * removeAnimal方法可以从数据库中删除指定编号的Animal对象
21. *
22. * @param id
23. * Animal对象的编号
24. */
25. public void removeAnimal(int id) {
26. // 获取EntityManagerFactory
27. EntityManagerFactory factory = Persistence
28. .createEntityManagerFactory("mysql");
29. // 获取EntityManager
30. EntityManager em = factory.createEntityManager();
31. // 开始事务处理
32. em.getTransaction().begin();
33.
34. // 使用Query删除对象
35. em.createQuery("delete from Animal animal where animal.id=" + id)
36. .executeUpdate();
37.
38. // 我们还可以选择通过Query对象来完成
39. /*
40. * // 从EntityManager中查询到符合条件的对象 Animal animal =
41. * em.find(Animal.class,id); // 调用EntityManager的 remove方法删除对象
42. * em.remove(animal);
43. */
44.
45. // 提交事务
46. em.getTransaction().commit();
47. // 关闭EntityManager
48. em.close();
49. // 关闭EntityManagerFactory
50. factory.close();
51.
52. }
53.
54. /**
55. * findAnimalsByName 通过输入的name内容模糊查找符合条件的 Animal对象列表
56. *
57. * @param name
58. * Animal对象的name
59. * @return 符合模糊查找条件的Animal对象列表
60. */
61. public List<Animal> findAnimalsByName(String name) {
62. // 获取EntityManagerFactory
63. EntityManagerFactory factory = Persistence
64. .createEntityManagerFactory("mysql");
65. // 获取EntityManager
66. EntityManager em = factory.createEntityManager();
67.
68. /*
69. * 通过EntityManager的createQuery方法获取Query对象
70. * createQuery方法的参数是JPQL查询语句,JPQL语句的语法请参考 Op
|