2009年12月8日火曜日

JPA/Hibernate/Eclipse/Maven

Hibernate 上で JPA を動かす Getting Started。 (後で Toplink もやってみる。) 以下の環境で、"Hello, World!"を出力するものを作ってみる。
  • Eclipse 3.5 + m2Eclipse
  • Maven 2.2.1
  • MySQL 5.0.45
  • Hibernate 3.3.2
■ データベースの用意
mysql> create database db1;
mysql> connect db1;
mysql> create table t1 (c1 int primary key, c2 varchar(20));
mysql> insert into t1 (c1, c2) values(100, 'World');
mysql> select * from t1;
+-----+-------+
| c1  | c2    |
+-----+-------+
| 100 | World |
+-----+-------+
■ プロジェクト生成
  • [New]->[Other...]->[Maven Project]で新規プロジェクト作成。アーキタイプに maven-archetype-quickstart 1.0 を選択。Artifact Id 等は適当に入力。ここでは以下のようにした。
    group idnet.yasuabe.studies
    artifact idjpa-hib-test1
    version0.0.1-SNAPSHOT
    packagenet.yasuabe.studies.jpa_hib_test1
  • POM のdependencies を以下のようにする。
    <dependencies>
       <dependency>
          <groupId>org.hibernate</groupId>
          <artifactId>hibernate-entitymanager</artifactId>
          <version>3.4.0.GA</version>
          <exclusions>
             <exclusion>
                <groupId>org.slf4j</groupId>
                <artifactId>slf4j-api</artifactId>
             </exclusion>
          </exclusions>
       </dependency>
       <dependency>
          <groupId>org.slf4j</groupId>
          <artifactId>slf4j-simple</artifactId>
          <version>1.5.10</version>
       </dependency>
       <dependency>
          <groupId>mysql</groupId>
          <artifactId>mysql-connector-java</artifactId>
          <version>5.1.10</version>
       </dependency>
       <dependency>
          <groupId>org.hibernate</groupId>
          <artifactId>hibernate-core</artifactId>
          <version>3.3.2.GA</version>
       </dependency>
    </dependencies>
  • src/test/java 下のAppTest.java を捨てる
■ Hello World 作成
  • [Build Path]->[New Source Folder...]で、src/main/resource を追加。
  • 上記ソースフォルダに、META-INF/persistence.xmlを作成。
    <?xml version="1.0" encoding="UTF-8"?>
    <persistence version="1.0" 
        xmlns="http://java.sun.com/xml/ns/persistence" 
        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
        xsi:schemaLocation="http://java.sun.com/xml/ns/persistence http://java.sun.com/xml/ns/persistence/persistence_1_0.xsd">
      <persistence-unit name="em1" transaction-type="RESOURCE_LOCAL">
        <provider>org.hibernate.ejb.HibernatePersistence</provider>
          <properties>
             <property name="hibernate.dialect" value="org.hibernate.dialect.MySQLDialect"/>
             <property name="hibernate.connection.driver_class" value="com.mysql.jdbc.Driver"/>
             <property name="hibernate.connection.url" value="jdbc:mysql://localhost:3306/db1"/>
          </properties>
      </persistence-unit>
    </persistence>
    ユーザ名/パスワード、その他のプロパティを指定する場合は[ここ参照]
  • こんなエンティティクラスを書く
    package net.yasuabe.studies.jpa_hib_test1;
    import javax.persistence.Entity;
    import javax.persistence.Id;
    
    @Entity
    public class T1 {
      @Id
      private int c1;
      private String c2;
      
      public int getC1() { return c1;  }
      public void setC1(int c1) { this.c1 = c1; }
    
      public String getC2() { return c2;  }
      public void setC2(String c2) { this.c2 = c2; }
    }
  • App のmain() を書き換える
    public static void main(String[] args) {
      EntityManagerFactory emf = Persistence.createEntityManagerFactory("em1");
      EntityManager em = emf.createEntityManager();
    
      T1 t1 = em.find(T1.class, 100);
      System.out.printf("Hello, %s!%n", t1.getC2());
    
      em.close();
      emf.close();
    }
■ 確認 実行すると、Hibernate のログ出力に混じって、コンソールビューに Hello, World! が出力されているのがわかる。いったん動いたら、後はまあ楽。 ちなみに 新規 Maven Project で jpa-maven-archetype というアーキタイプも使える(http://maven.rodcoffin.com/repo)。上のやり方でやった場合とちょっと違う構成になる。

0 件のコメント:

コメントを投稿