Your SlideShare is downloading. ×
0
WebLogic Server 勉強会JPA 2.0入門2013年 3月21日日本オラクル株式会社Fusion Middleware事業統括本部 松林晶1   Copyright © 2012, Oracle and/or its affili...
Program Agenda                  JPAとは                  JPA Demo                  JPA2.1 新機能(予定)2   Copyright © 2012, Or...
JPAとは        概要           Java Persistence APIの略           Java EE環境に限らず、Java SEでも利用可能           O/Rマッピングの仕様です         ...
JPAとは        JPAの歴史           誕生の背景                                                                           EntityBeanの...
JPAとは        JDBCプログラミング          public static void main(String[] args) {                                                ...
JPAとは        JPAの構成要素                                                                                        Persistence C...
JPAとは        エンティティとは           テーブルに対応したマッピング対象のクラス(=エンティティ)                    – ただのPOJO(Plain Old Java Object)で作成     ...
JPAとは        エンティティのライフサイクル8   Copyright © 2012, Oracle and/or its affiliates. All rights reserved.
JPAとは        エンティティのライフサイクル(コード例)           ライフサイクルのコード例                    – エンティティのインスタンスを生成(new)しただけではデータベースに         ...
JPAとは         2種類のエンティティマネージャ            コンテナ管理のエンティティマネージャ(Java EE環境)                     – アノテーション、DIによりEntityManagerをイ...
JPAとは         エンティティマネージャ①            データ操作及び管理の為のAPIを提供する。                     – ライフサイクル管理のためのAPI                      p...
JPAとは         エンティティマネージャ②            データ操作及び管理の為のAPIを提供する。                     – Query関連のAPI                            ...
JPAとは         JPQL            Java Persistence Query Languageの略                     – SQLに似たJPA用のクエリー言語                  ...
JPAとは         JPQL            JPAのクエリは4種類                     1. 動的クエリ                                   アプリケーション実行時にクエリ...
JPAとは         JPQL            JPAのクエリは4種類                     4. Criteria API                                        JPA2...
JPA Demo16   Copyright © 2012, Oracle and/or its affiliates. All rights reserved.
JPA Demo         Oracle Enterprise Pack for Eclipse 12c + WebLogic Server 12c            Oracle Enterprise Pack for Eclip...
JPA2.1 新機能(予定)         JSR-338 Java Persistence 2.1         Proposed Final Draft18   Copyright © 2012, Oracle and/or its a...
JPA2.1 新機能(予定)         Java EE 6 から Java EE 7へ そして Java EE 8へ…                      2009                                  ...
JPA2.1 新機能(予定)         概要            JPAもJava EE 6 から Java EE 7へ                   JPA2.0                                ...
JPA2.1 新機能(予定)         ストアドプロシージャのサポート①            そもそもストアドプロシージャって…                     – データベースに対する一連の処理をまとめた一つのプログラム(デ...
JPA2.1 新機能(予定)         ストアドプロシージャのサポート②            定義済み関数 + ユーザ定義関数の呼び出し可能                     – 実装例                     ...
JPA2.1 新機能(予定)          ストアドプロシージャのサポート③ 【参考情報】Javadoc             JCPのWebサイトにてJavadoc公開                                 ...
JPA2.1 新機能(予定)         バルク更新 / バルク削除のサポート            CriteriaAPIでバルク(一括)更新のサポート                     – CriteriaBuilderにcre...
JPA2.1 新機能(予定)         JPQLの機能強化            ON句のサポート                     – ON句はJOINの結合条件を記述する                            ...
26   Copyright © 2012, Oracle and/or its affiliates. All rights reserved.
27   Copyright © 2012, Oracle and/or its affiliates. All rights reserved.
Upcoming SlideShare
Loading in...5
×

Java Persistence API入門

6,112

Published on

JPAはO/RマッピングのAPIで、Java EEの標準仕様にも含まれています。アプリケーションのデータアクセス層開発を簡単にするだけでなく、Eclipse(OEPE 12c)やWebLogic Server 12cと組み合わせることで、より効率の良い開発を行う ことができます。JPAの基本から簡単な開発手順を解説します。

日本オラクル株式会社 Fusion Middleware事業統括本部 ソリューション本部
松林 晶

Published in: Technology
0 Comments
9 Likes
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total Views
6,112
On Slideshare
0
From Embeds
0
Number of Embeds
2
Actions
Shares
0
Downloads
104
Comments
0
Likes
9
Embeds 0
No embeds

No notes for slide

Transcript of "Java Persistence API入門"

  1. 1. WebLogic Server 勉強会JPA 2.0入門2013年 3月21日日本オラクル株式会社Fusion Middleware事業統括本部 松林晶1 Copyright © 2012, Oracle and/or its affiliates. All rights reserved.
  2. 2. Program Agenda  JPAとは  JPA Demo  JPA2.1 新機能(予定)2 Copyright © 2012, Oracle and/or its affiliates. All rights reserved.
  3. 3. JPAとは 概要  Java Persistence APIの略  Java EE環境に限らず、Java SEでも利用可能  O/Rマッピングの仕様です – データベースのテーブルのレコードをJavaのオブジェクトに相互変換 – Javaのオブジェクトにアクセスし、データベース操作可能 参照 Java App 挿入 更新 Object データベース 削除 マッピング(自動で相互変換)3 Copyright © 2012, Oracle and/or its affiliates. All rights reserved.
  4. 4. JPAとは JPAの歴史  誕生の背景 EntityBeanの – EJBの難解さ、O/Rマッピングフレームワーク 難解さ  JPA1.0(2006年) – EJB3.0の仕様の一部 O/Rマッピング – 従来のEntityBeanに代わるものとして策定 フレームワーク  JPA2.0(2009年) の台頭 – EJBから独立(Java EE 6)  JPA2.1(2013年予定) – Java EE 7 予定4 Copyright © 2012, Oracle and/or its affiliates. All rights reserved.
  5. 5. JPAとは JDBCプログラミング public static void main(String[] args) { public static void main(String[] args) { Connection con = null; EntityManager em = Persistence.createEntityManagerFactory("db").createEntityManager(); PreparedStatement stm = null; Employee emp = em.find(Employee.class, 100L); try { System.out.println(emp); Class.forName(“oracle.jdbc.OracleDriver”); em.close(); con = DriverManager.getConnection("jdbc:oracle:thin:@localhost:1521:xe", "HR", "hr"); } stm = con.prepareStatement("SELECT * FROM Employees e WHERE e.EMPLOYEE_ID = ?"); stm.setInt(1, 100); ResultSet rSet = stm.executeQuery(); if (rSet.next()) { Employee emp = new Employee(); emp.setEmployeeId(rSet.getLong("EMPLOYEE_ID")); emp.setLastName(rSet.getString("LAST_NAME")); emp.setFirstName(rSet.getString("FIRST_NAME")); emp.setEmail(rSet.getString("EMAIL")); emp.setPhoneNumber(rSet.getString("PHONE_NUMBER")); emp.setHireDate(rSet.getDate("HIRE_DATE")); emp.setJobId(rSet.getString("JOB_ID")); emp.setSalary(BigDecimal.valueOf(rSet.getLong("SALARY"))); emp.setCommissionPct(BigDecimal.valueOf(rSet.getLong("COMMISSION_PCT"))); emp.setDepartmentId(BigDecimal.valueOf(rSet.getLong("DEPARTMENT_ID"))); System.out.println(emp); コード量大幅削減 } } catch (ClassNotFoundException e) { e.printStackTrace(); } catch (SQLException e) { e.printStackTrace(); } finally { try { if (stm != null) stm.close(); if (con != null) con.close(); } catch (SQLException e) { e.printStackTrace(); } }5 Copyright © 2012, Oracle and/or its affiliates. All rights reserved.
  6. 6. JPAとは JPAの構成要素 Persistence Context Persistent Unit EntityManager (persistence.xml) データ操作及び管理の Entity 為のAPIを提供する Entity Entity データベース 決定 Entity 生成 Entity EntityManagerFactory Persistence Unitの設定に基づ き、Entity Managerのインスタ ンスを生成6 Copyright © 2012, Oracle and/or its affiliates. All rights reserved.
  7. 7. JPAとは エンティティとは  テーブルに対応したマッピング対象のクラス(=エンティティ) – ただのPOJO(Plain Old Java Object)で作成 – @Entityアノテーション ⇒ エンティティクラスであることを示す – @Idアノテーション ⇒ 主キーを示す @Entity public class Customer { エンティティ データベース @Id Customerクラス CUSTOMER表 private Long id; private String address1; ID ADDRESS1 AGE NAME TELEPHONE private long age; private String name; private String telephone; //セッタ・ゲッタ }7 Copyright © 2012, Oracle and/or its affiliates. All rights reserved.
  8. 8. JPAとは エンティティのライフサイクル8 Copyright © 2012, Oracle and/or its affiliates. All rights reserved.
  9. 9. JPAとは エンティティのライフサイクル(コード例)  ライフサイクルのコード例 – エンティティのインスタンスを生成(new)しただけではデータベースに は何も反映されない EntityManagerFactory emf = Persistence.createEntityManagerFactory(”DB"); EntityManager em = emf.createEntityManager(); EntityTransaction tx = em.getTransaction(); Customer customer = new Customer(); //Entityの生成 tx.begin(); em.persist(customer); //管理状態のEntity tx.commit(); //デタッチ状態になるEntity //JavaのHeapにはcustomerは存在するが、JPAの管理状態から外れデタッチ状態 //この状態でcustomerに対する操作を行った場合は、merge()で同期 em.close(); emf.close();9 Copyright © 2012, Oracle and/or its affiliates. All rights reserved.
  10. 10. JPAとは 2種類のエンティティマネージャ  コンテナ管理のエンティティマネージャ(Java EE環境) – アノテーション、DIによりEntityManagerをインスタンスを注入 – コンテナがトランザクションを管理する @PersistenceContext(unitname = “DB”) private EntityManager entityManager;  アプリケーション管理のエンティティマネージャ(Java SE/EE環境) – Factoryメソッドを使用して、EntityManagerを取得 – アプリケーション側でトランザクションを管理のためのコーディング必要 EntityManagerFactory emf = Persistence.createEntityManagerFactory(“DB"); EntityManager em = emf.createEntityManager(); EntityTransaction tx = em.getTransaction(); tx.begin(); em.persist(customer); tx.commit(); em.close(); emf.close();10 Copyright © 2012, Oracle and/or its affiliates. All rights reserved.
  11. 11. JPAとは エンティティマネージャ①  データ操作及び管理の為のAPIを提供する。 – ライフサイクル管理のためのAPI persist() エンティティクラスを永続化管理対象にする (insert対象にする) remove() エンティティクラスを削除する(delete対象にする) refresh() データを同期する。データベースのデータでエンティティを上書き merge() 分離したエンティティをマージする。(管理対象にする) – 検索のためのAPI find() 主キーによるエンティティの検索 getReference() 主キーによるエンティティの検索11 Copyright © 2012, Oracle and/or its affiliates. All rights reserved.
  12. 12. JPAとは エンティティマネージャ②  データ操作及び管理の為のAPIを提供する。 – Query関連のAPI  createQuery() ,createNamedQuery() ,createNativeQuery() – Persistenceコンテキストの管理API flush() データを明示的にDBと同期する clear() エンティティ全てを管理対象から外す getTransaction() トランザクションの参照を取得 close() アプリケーション管理のエンティティマネージャを終了する12 Copyright © 2012, Oracle and/or its affiliates. All rights reserved.
  13. 13. JPAとは JPQL  Java Persistence Query Languageの略 – SQLに似たJPA用のクエリー言語 – SELECT / UPDATE / DELETEなどに対応 – WHERE句、ソート(ORDER BY)、集約(GROUP BY)等も可能 SELECT c FROM Customer c WHERE c.lastName = ‘Yamada’ ORDER BY c.id13 Copyright © 2012, Oracle and/or its affiliates. All rights reserved.
  14. 14. JPAとは JPQL  JPAのクエリは4種類 1. 動的クエリ  アプリケーション実行時にクエリを定義 2. 名前付きクエリ  動的クエリと異なり、静的で変更できないクエリ 3. ネイティブクエリ  データベース固有の機能を使用するためのクエリ(SQLをそのまま使 用可能)14 Copyright © 2012, Oracle and/or its affiliates. All rights reserved.
  15. 15. JPAとは JPQL  JPAのクエリは4種類 4. Criteria API JPA2.0  JPQLに相当するクエリをAPIベースで記述し型の安全性を確保 キャスト時の型 Criteria API による表記 チェック JPQL による表記 CriteriaBuilder builder = em.getCriteriaBuilder(); SELECT c FROM Customer c CriteriaQuery<Customer> query = builder.createQuery(Customer.class); WHERE c.name = ‘Oracle’ Root<Customer> c = query.from(Customer.class); query.select(c).where(builder.equal(c.get("name"), "Oracle"));15 Copyright © 2012, Oracle and/or its affiliates. All rights reserved.
  16. 16. JPA Demo16 Copyright © 2012, Oracle and/or its affiliates. All rights reserved.
  17. 17. JPA Demo Oracle Enterprise Pack for Eclipse 12c + WebLogic Server 12c  Oracle Enterprise Pack for Eclipse 12cを使用した簡単JPA開発17 Copyright © 2012, Oracle and/or its affiliates. All rights reserved.
  18. 18. JPA2.1 新機能(予定) JSR-338 Java Persistence 2.1 Proposed Final Draft18 Copyright © 2012, Oracle and/or its affiliates. All rights reserved.
  19. 19. JPA2.1 新機能(予定) Java EE 6 から Java EE 7へ そして Java EE 8へ… 2009 2013 ? Java EE 6 Java EE 7 Java EE 8 進 化19 Copyright © 2012, Oracle and/or its affiliates. All rights reserved.
  20. 20. JPA2.1 新機能(予定) 概要  JPAもJava EE 6 から Java EE 7へ JPA2.0 JSR 338 JPA2.1 Java EE 6 Java EE 7 JPQL/CriteriaAPIの強化 ストアドプロシージャサポート バルク更新 ON句サポート 他…20 Copyright © 2012, Oracle and/or its affiliates. All rights reserved.
  21. 21. JPA2.1 新機能(予定) ストアドプロシージャのサポート①  そもそもストアドプロシージャって… – データベースに対する一連の処理をまとめた一つのプログラム(データ ベースに保存) – クライアントから引数を渡して処理を実行、処理結果を返すことができる A実行命令! PROCEDURE A( i_param IN NUMBER, WebLogic 引数 o_param OUT NUMBER) Server 戻り値 アプリケーション 処理結果等 データベース サーバ21 Copyright © 2012, Oracle and/or its affiliates. All rights reserved.
  22. 22. JPA2.1 新機能(予定) ストアドプロシージャのサポート②  定義済み関数 + ユーザ定義関数の呼び出し可能 – 実装例 ストアドプロシージャのインスタストアドプロシージャ呼び出し側(セッションBean等) ンスを作成する。// ①エンティティマネージャからストアドプロシージャを作成する 実行前に、パラメータのセットを しておくこStoredProcedreQuery query = プロシージャの戻り値は単数もしEntityManager.createNamedStoredProcedureQuery(“topGiftsStoredProcedure”); くはObjectの配列で返す// ②引数の設定query.registerStoredProcedureParameter(1, String.class, ParameterMode.INOUT); パラメータの登録query.setParameter(1, “top10”); 全てのパラメータは登録されなくquery.registerStoredProcedureParameter(2, Integer.class, ParameterMode.IN); てはならないquery.setParameter(2, 100); 第1パラメータは、String型で双方// ③ストアドプロシージャの実行 向query.execute();// ④アウトプットパラメータの1を取得 OUTパラメータ(戻り値)の取得String response = query.getOutputParameterValue(1);22 Copyright © 2012, Oracle and/or its affiliates. All rights reserved.
  23. 23. JPA2.1 新機能(予定) ストアドプロシージャのサポート③ 【参考情報】Javadoc  JCPのWebサイトにてJavadoc公開 javax.persistence Interface EntityManager javax.persistence Interface StoredProcedureQuery23 Copyright © 2012, Oracle and/or its affiliates. All rights reserved.
  24. 24. JPA2.1 新機能(予定) バルク更新 / バルク削除のサポート  CriteriaAPIでバルク(一括)更新のサポート – CriteriaBuilderにcreateCriteriaUpdate()メソッド追加 – javax.persistence.criteria.CriteriaUpdateインターフェースの追加  実装例 一緒 CriteriaUpdate<Customer> q = cb.createCriteriaUpdate(Customer.class); Root<Customer> c = q.from(Customer.class); q.set(c.get(Customer_.status), "outstanding") .where(cb.lt(c.get(Customer_.balance), 10000)); UPDATE Customer c SET c.status = outstanding WHERE c.balance < 10000  CriteriaAPIでバルク削除のサポート – CriteriaBuilderにcreateCriteriaDeleteメソッド追加 – javax.persistence.criteria.CriteriaDeleteインターフェースの追加24 Copyright © 2012, Oracle and/or its affiliates. All rights reserved.
  25. 25. JPA2.1 新機能(予定) JPQLの機能強化  ON句のサポート – ON句はJOINの結合条件を記述する SELECT s.name, COUNT(p) FROM Suppliers s LEFT JOIN s.products p ON p.status = inStock GROUP BY s.name – 連動して、Criteria APIにon() getOn() メソッドの追加25 Copyright © 2012, Oracle and/or its affiliates. All rights reserved.
  26. 26. 26 Copyright © 2012, Oracle and/or its affiliates. All rights reserved.
  27. 27. 27 Copyright © 2012, Oracle and/or its affiliates. All rights reserved.
  1. A particular slide catching your eye?

    Clipping is a handy way to collect important slides you want to go back to later.

×