EntityManager と EJB QL EJB 3.0 コース 第8回 1 ここでの目標 Entity Manager の使いかた、とりわけ EJB QL について理解する。 2 EntityManagerの利用 3 EntityManager と @Inject @Inject private EntityManager em; EntityManager は、データの永続管理を受け持つ オブジェクト。データベースと接続して、さまざまな 処理を行う。 @Inject は、Dependency Injection (依存性注入) を行うためのアノテーション。EntityManager は、コ ンテナによって依存性注入される。 4 EntityManager#find public Employee findEmployeeByEmpNo(int empNo) { return ((Employee) em.find("Employee",empNo)); } EntityManager の find メソッドは、データベースか らempNo という主キーで指定したデータを検索し、 検索結果として Employee オブジェクトを返す。 5 EntityManager#persist public void addEmployee(int empNo, String eName, double sal) { if (emp == null) emp = new Employee(); emp.setEmpNo(empNo); emp.setEname(eName); emp.setSal(sal); em.persist(emp); } EntityManager の persist メソッドで、Entity Bean を永続 化している。つまり、データをデータベースで管理するように している。 6 EntityManager#remove @Stateless public class EmployeeDemoSessionEJB implements EmployeeDemoSession { public void removeEmployee(Integer employeeId) { Employee employee = (Employee)em.find("Employee", employeeId); em.remove(employee); } } EntityManager の remove メソッドで、データベースで管理され ているオブジェクトを削除できる。 7 データベースの更新 Employee emp3 = ef.findEmployeeByEmpNo(empNo); emp3.setSal(100000); Entity Bean のプロパティの内容を変化させ ると、その内容がデータベースに反映される。 8 EJB QL 9 EJB QL とは何か EJBでデータベースを操作するためのクエ リー言語 データベースに依存しないかたちでクエリー を記述できる 10 EJB QL のパターン select … from … where … EntityManager の createQuery, createNamedQuery といったメソッドから利 用する。 11 createQueryとEJB-QLの利用 public Collection findAllEmployees() { Collection employees = em.createQuery( "SELECT employee FROM Employee employee") .getResultList(); return employees; } public Collection findEmployeesByLastName(String lastName) { Collection employees = em.createQuery( "SELECT employee FROM Employee employee WHERE employee.lastName = :lastname") .setParameter("lastname", lastName).getResultList(); return employees; } 12 createQueryとEJB-QLの利用 public Collection findManyProjectsByQuery(Vector params) { Collection projects = em.createQuery( "SELECT project FROM Project project WHERE project.name LIKE :projectName") .setParameter("projectName", params.firstElement()) .getResultList(); return projects; } public int changeCityName(String oldName, String newName) { StringBuffer buffer = new StringBuffer(); buffer.append("UPDATE Address address SET address.city = '"); buffer.append(newName); buffer.append("' WHERE address.city = '"); buffer.append(oldName); buffer.append("'"); String ejbqlString = buffer.toString(); return em.createQuery(ejbqlString).executeUpdate(); 13 } NamedQueryの利用 @Entity @Table(name="EJB_PROJECT") @NamedQuery( name="findProjectByName", queryString="SELECT project FROM Project project WHERE project.name = :name" ) public class Project implements Serializable {…..} public Project findProjectByName(String name) { Project proj = (Project)em.createNamedQuery("findProjectByName") .setParameter("name", name).getSingleResult(); proj.getTeamLeader(); return proj; } 14 課題 (1) Entity Bean のサンプルに、「指定したIDを 持つ従業員の給料を100上げる」という機能 を追加してください。 15 課題 (2) 図書館の本の検索アプリケーションを作成し ます。例えば “Java” を引数に与えた ら、”Java” という文字がタイトルに含まれる 本のリストを出力するような機能を持つアプ リケーションを作成してください。 本のデータはダウンロードできます。 16
© Copyright 2025 ExpyDoc