Maven 2 + Hibernate 3.2 + MySQLの例(XMLマッピング)

Maven 2 + Hibernate 3.2 + MySQLの例(XMLマッピング)

Note
この記事は古くなっています。最新のHibernate 3.6チュートリアル(–Maven 3 + Hibernate 3.6 + Oracle 11g Example (XML Mapping))を参照してください。

このクイックガイドでは、Mavenを使用して単純なJavaプロジェクトを生成する方法を示し、Hibernateを使用してレコードをMySQLデータベースに挿入します。

この記事で使用したツールとテクノロジー:

  1. メーベン2.2.1

  2. JDK 1.6.0_13

  3. Hibernate 3.2.3.GA

  4. MySQL 5.0

1. テーブル作成

「ストック」テーブルを作成するMySQLスクリプト。

DROP TABLE IF EXISTS `stock`;
CREATE TABLE `stock` (
  `STOCK_ID` INT(10) UNSIGNED NOT NULL AUTO_INCREMENT,
  `STOCK_CODE` VARCHAR(10) NOT NULL,
  `STOCK_NAME` VARCHAR(20) NOT NULL,
  PRIMARY KEY (`STOCK_ID`) USING BTREE,
  UNIQUE KEY `UNI_STOCK_NAME` (`STOCK_NAME`),
  UNIQUE KEY `UNI_STOCK_ID` (`STOCK_CODE`) USING BTREE
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

2. Mavenを使用してプロジェクト構造を生成する

コマンドプロンプトで「mvn archetype:generate」を発行し、プロジェクト#15を選択してクイックスタートMavenのJavaプロジェクトを作成し、プロジェクトの情報(groupId、artifactId、package)を入力します。

E:\workspace>mvn archetype:generate
[INFO] Scanning for projects...
...
Choose a number:
(1/2/3....) 15: : 15
...
Define value for groupId: : com.example.common
Define value for artifactId: : HibernateExample
Define value for version:  1.0-SNAPSHOT: :
Define value for package:  com.example.common: : com.example.common
[INFO] OldArchetype created in dir: E:\workspace\HibernateExample
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESSFUL
[INFO] ------------------------------------------------------------------------

3. Eclipseプロジェクトに変換する

mvn eclipse:eclipse」を発行して、新しく生成されたプロジェクトをEclipseのスタイルプロジェクトに変換します

4. 変換されたプロジェクトをEclipse IDEにインポートする

Eclipse IDEで、[ファイル]-> [インポート]-> [一般]フォルダー、[既存プロジェクトをワークスペースに]->プロジェクトフォルダーの場所を選択します。 Done

5. リソースフォルダーを作成する

src/main」フォルダー「/src/main/resources」の下にリソースフォルダーを作成します。後ですべてのHibernateのxmlファイルがここに配置されます。 Mavenはこのフォルダー内のすべてのファイルをリソースファイルとして扱い、それを出力クラスに自動的にコピーします。

6. プロジェクト構造を確認する

次のようにフォルダ構造を確認してください

hibernate-example-1

MavenはすべてのJavaの標準フォルダー構造を生成します(リソースフォルダーのほか、クイックスタートアーキタイプ#15にはリソースフォルダーが含まれていません)

7. HibernateとMySQLの依存関係を追加する

Mavenのpom.xmlファイルを変更し、HibernateとMySQLのサポートを追加します。 Hibernateには、dom4j、commons-logging、commons-collections、および依存ライブラリとしてのcglibが必要です。追加してください。

ファイル:pom.xml


4.0.0
  com.example.common
  HibernateExample
  jar
  1.0-SNAPSHOT
  HibernateExample
  http://maven.apache.org
  

    
      junit
      junit
      3.8.1
      test
    

        
    
        mysql
        mysql-connector-java
        5.1.9
    

    
    
        hibernate
        hibernate3
        3.2.3.GA
    


    
    
        dom4j
        dom4j
        1.6.1
    

    
        commons-logging
        commons-logging
        1.1.1
    

    
        commons-collections
        commons-collections
        3.2.1
    

    
        cglib
        cglib
        2.2
    
    

    
        javax.transaction
        jta
        1.1
    

  

mvn eclipse:eclipse」を発行すると、MavenはすべてのHibernateおよびMySQLライブラリを自動的にダウンロードし、Mavenのローカルリポジトリに配置します。 同時に、Mavenは、依存関係の目的で、ダウンロードしたライブラリをEclipseの「.classpath」に追加します。 もう一度言ってください:)、ライブラリを見つけて自分でコピーする必要はありません。

8. Hibernateマッピングファイルとモデルクラスを作成する

前提条件では、「stock」という名前のテーブルが作成されます。ここで、Hibernate XMLマッピングファイルとモデルクラスを作成する必要があります。

Stock.hbm.xmlファイルを作成し、「src/main/resources/com/example/common/Stock.hbm.xml」に配置します。 「resources / com / example / common /」フォルダーが存在しない場合は、作成します。

ファイル:Stock.hbm.xml





    
        
            
            
        
        
            
        
        
            
        
    

Stock.javaファイルを作成し、「src/main/java/com/example/common/Stock.java」に配置します

ファイル:Stock.java

package com.example.common;

/**
 * Model class for Stock
 */
public class Stock implements java.io.Serializable {

    private static final long serialVersionUID = 1L;

    private Integer stockId;
    private String stockCode;
    private String stockName;

    public Stock() {
    }

    public Stock(String stockCode, String stockName) {
        this.stockCode = stockCode;
        this.stockName = stockName;
    }

    public Integer getStockId() {
        return this.stockId;
    }

    public void setStockId(Integer stockId) {
        this.stockId = stockId;
    }

    public String getStockCode() {
        return this.stockCode;
    }

    public void setStockCode(String stockCode) {
        this.stockCode = stockCode;
    }

    public String getStockName() {
        return this.stockName;
    }

    public void setStockName(String stockName) {
        this.stockName = stockName;
    }

}

Note
モデルクラスの作成とマッピングファイルは、大規模なアプリケーションでは非常に面倒です。Hibernateツールを使用すると、これを自動的に生成できます。この記事を確認してください–Hibernate tools to generate it automatically

9. Hibernate設定ファイルを作成する

Hibernateの構成ファイルを作成し、リソースルートフォルダー「src/main/resources/hibernate.cfg.xml」の下に配置します。 それに応じてMySQL設定を入力します。

ファイル:hibernate.cfg.xml




    
        false
        com.mysql.jdbc.Driver
        password
        jdbc:mysql://localhost:3306/example
        root
        org.hibernate.dialect.MySQLDialect
        true
        
    

「show_sql」プロパティをtrueに設定すると、Hibernate SQLステートメントが出力されます。 Hibernate Dialectは、データベースと通信するために生成する必要があるSQLをHibernateアプリケーションに伝えています。 他のデータベース方言–Hibernate dialect collectionについては、この記事を参照してください。

10. Hibernate Utilityクラスを作成する

HibernateUtil.javaクラスを作成して、Hibernateの起動を管理し、セッションを簡単に取得します。 永続フォルダーを作成し、このファイル「src/main/java/com/example/persistence/HibernateUtil.java」をその中に入れます

ファイル:HibernateUtil.java

package com.example.persistence;

import org.hibernate.SessionFactory;
import org.hibernate.cfg.Configuration;

public class HibernateUtil {

    private static final SessionFactory sessionFactory = buildSessionFactory();

    private static SessionFactory buildSessionFactory() {
        try {
            // Create the SessionFactory from hibernate.cfg.xml
            return new Configuration().configure().buildSessionFactory();
        }
        catch (Throwable ex) {
            // Make sure you log the exception, as it might be swallowed
            System.err.println("Initial SessionFactory creation failed." + ex);
            throw new ExceptionInInitializerError(ex);
        }
    }

    public static SessionFactory getSessionFactory() {
        return sessionFactory;
    }

    public static void shutdown() {
        // Close caches and connection pools
        getSessionFactory().close();
    }

}

11. プロジェクト構造を再度確認する

多くの新しいファイルとフォルダーを作成し、確認して、フォルダー構造が次のようになっていることを確認してください

hibernate-example-2

12. レコードを保存するようにコーディングする

デフォルトのApp.javaクラスを次のように変更します。

ファイル:App.java

package com.example.common;

import org.hibernate.Session;
import com.example.persistence.HibernateUtil;

public class App
{
    public static void main( String[] args )
    {
        System.out.println("Maven + Hibernate + MySQL");
        Session session = HibernateUtil.getSessionFactory().openSession();

        session.beginTransaction();
        Stock stock = new Stock();

        stock.setStockCode("4715");
        stock.setStockName("GENM");

        session.save(stock);
        session.getTransaction().commit();
    }
}

13. 実行して出力を見る

App.javaを実行すると、「Stock」テーブルに新しいレコードが挿入されます。

Maven + Hibernate + MySQL
...
Dec 17, 2009 5:05:26 PM org.hibernate.impl.SessionFactoryObjectFactory addInstance
INFO: Not binding factory to JNDI, no JNDI name configured
Hibernate: insert into example.stock (STOCK_CODE, STOCK_NAME) values (?, ?)

完了しました。

ダウンロード–Maven_Hibernate_MySQL_Example.zip(12kb)