トップ 新規 編集 差分 一覧 ソース プレゼンテーション 検索 ヘルプ PDF RSS ログイン

JPAの利用

JPAの利用

 データベースの準備

  • JavaSE6以降であればOSSのリレーショナルデータベースであるDerbyが同封されているため、インストールする必要はない。
    • パソコン教室はJavaSE5であるため、Derby(Derbyでなくてもよい)をインストールする

 JPAの準備

  • JPA(Java Persistence API)はもともとJavaEEの一部であったが、現在はJavaSEからも利用することが可能である
    • ここではGlassfishのサブプロジェクトとして開発が進められているToplink-essantialを用いる

persistence.xmlの準備

  • JPAの設定ファイルであるpersistence.xmlをsrc/META-INF/に置く。
    • ここでは、Derbyはサーバではなく埋め込み型として、データベースがない場合には作成、テーブルがない場合には作成する設定としている
1
2
3
4
5
6
7
8
9
10
11
12
13
14
<?xml version="1.0" encoding="UTF-8"?>
<persistence xmlns="http://java.sun.com/xml/ns/persistence" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" version="1.0" xsi:schemaLocation="http://java.sun.com/xml/ns/persistence http://java.sun.com/xml/ns/persistence/persistence_1_0.xsd">
    <persistence-unit name="derbyDb" transaction-type="RESOURCE_LOCAL">
        <provider>oracle.toplink.essentials.ejb.cmp3.EntityManagerFactoryProvider</provider>
        <exclude-unlisted-classes>false</exclude-unlisted-classes>
        <properties>
            <property name="toplink.logging.level" value="INFO" />
            <property name="toplink.target-database" value="Derby" />
            <property name="toplink.jdbc.driver" value="org.apache.derby.jdbc.EmbeddedDriver" />
            <property name="toplink.jdbc.url" value="jdbc:derby:derbyDb;create=true" />
             <property name="toplink.ddl-generation" value="create-tables"/>
         </properties>
    </persistence-unit>
</persistence>

 JPAの例

Entity:db\Journal.java

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
package db;

import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;

@Entity
public class Journal {
    @Id
    @GeneratedValue(strategy=GenerationType.AUTO)
    private long id;
    private String title,url;

    public String getTitle() {
        return title;
    }

    public void setTitle(String title) {
        this.title = title;
    }

    public String getUrl() {
        return url;
    }

    public void setUrl(String url) {
        this.url = url;
    }
}

データベースアクセスの例:DerbyTest.java

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
package db;

import java.util.List;

import javax.persistence.EntityManager;
import javax.persistence.EntityTransaction;
import javax.persistence.Persistence;
import javax.persistence.Query;


public class DerbyTest {
    public static void main(String[] args) {
        EntityManager entityManager = Persistence.createEntityManagerFactory("derbyDb").createEntityManager();
        EntityTransaction entityTransaction = entityManager.getTransaction();
        //全部消去
        entityTransaction.begin();
        Query query = entityManager.createQuery("delete from Journal j");
        query.executeUpdate();
        entityTransaction.commit();
        //データ追加
        entityTransaction.begin();
        for(int i=0;i<10;i++) {
            Journal journal = new Journal();
            journal.setTitle("j"+(i+1));
            journal.setUrl("http://test.com/"+(i+1));
            entityManager.persist(journal);
            System.out.println("データを追加しました:"+(i+1));
        }
        entityTransaction.commit();
        //データ修正
        query = entityManager.createQuery("select j from Journal j");
        List<Journal> journals = (List<Journal>)query.getResultList();
        entityTransaction.begin();
        int counter=0;
        for(Journal j:journals) {
            j.setTitle(j.getTitle()+"modified");
            entityManager.merge(j);
            System.out.println("データを修正しました:"+(counter+1));
        }
        entityTransaction.commit();
        //データ表示
        for(Journal j:journals) {
            System.out.println(j.getTitle());
            System.out.println(j.getUrl());
        }
        entityManager.close();
    }
}

 JPAの例2

JPAの例:図書データベース

最終更新時間:2008年02月01日 04時46分46秒