👉

Eclipse4.3で、HibernateによるMySQLへの永続化を行う開発の流れ

に公開

このエントリでは、Windows上でEclipse4.3を使用し、
HibernateORMによるJavaObjectのMySQLへの永続化の開発を試す流れを説明します。

作成するプログラムは、
以下のHibernate ORMのチュートリアルを参考にします。

Hibernate Getting Started Guide
http://docs.jboss.org/hibernate/orm/4.2/quickstart/en-US/html/

ここでは、Eclipse/MySQLのバージョンは以下を使用します。
・Eclipse IDE for Java EE Developers 4.3.1 (Kepler)
・MySQL Community Server 5.6.15.0

以下の説明は、Java/Eclipseはセットアップ済みの前提で進めます。

MySQL Community Serverのセットアップ

以下のサイトからMySQL Community Serverをダウンロードします。

MySQL :: Developer Zone
 http://dev.mysql.com/
 →Downloads
 →MySQL Community Server
 →Windows (x86, 32-bit), MSI Installer [Download]
ファイル名:mysql-installer-community-5.6.15.0.msi
# 環境に応じたファイルをダウンロードして下さい。

ダウンロードしたファイルを実行して、
インストーラーの指示に従いインストールを行います。
デフォルトの設定でインストールで問題ないと思います。

Eclipseでのプロジェクト作成、依存Jarファイルの追加

Eclipseを起動したら、
File → New → MavenProject メニューを選択すると、
New Maven Projectダイアログが表示されます。

hibernate01

「Next >」を押下します。

hibernate02

ArtifactId「maven-archetype-quickstart」を選んで「Next >」を押下します。

hibernate03

GroupIdとArtifactIDを、任意に指定して「Finish」を押下します。
GroupIdにはモジュールが属するグループのID、ArtifactIdモジュールのIDを指定しますが、
ひとまずここでは、
Group Idを、com.takemikami
Artifact Idを、hibernatesample
としておきます。

「Java EE」perspectiveを開いて、PojectExploererを確認すると、
以下のようなプロジェクトが作成されているはずです。

hibernate04

次に、Eclipseで作成したプロジェクト配下の「pom.xml」を開きます。

hibernate05

pom.xmlタブを選び、pom.xmlのソースを表示し、
Hibernateのページに掲載されている依存ライブラリの情報を追記、保存します。

Getting started with Hibernate ORM
http://hibernate.org/orm/documentation/getting-started/

<dependency>
<groupId>org.hibernate</groupId>
<artifactId>hibernate-core</artifactId>
<version>4.3.0.Final</version>
</dependency>

hibernate06

mysqlのConnectorも、
以下のサイトで調べて、追記しておきます。

Maven Repository: Search/Browse/Explore
http://mvnrepository.com

<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>5.1.28</version>
</dependency>

プロジェクト配下の「Maven Dependencies」を開き、
追加した依存ライブラリがあることをことを確認します。
・hibernate-core-4.3.0.Final.jar
・mysql-connector-java-5.1.28.jar
など

データベースの作成及びHibernateへの接続設定

MySQL 5.6 Command Line Clinetを起動し、以下のSQLを発行します。
パスワードはインストール時に指定したrootユーザのパスワードを指定。

create database hibernatedb CHARACTER SET utf8;
GRANT ALL ON hibernatedb.* TO hibernateuser@'localhost' IDENTIFIED BY 'hibernateuser';

次に、Eclipseで作成したプロジェクトを開き、
以下のような、Hibernateの設定ファイルを作成します。

src/main/java/hibernate.cfg.xml

<!DOCTYPE hibernate-configuration PUBLIC
"-//Hibernate/Hibernate Configuration DTD 3.0//EN"
"http://www.hibernate.org/dtd/hibernate-configuration-3.0.dtd">
<hibernate-configuration>
<session-factory>

<!-- Database connection settings -->
<property name="connection.driver_class">com.mysql.jdbc.Driver</property>
<property name="connection.url">jdbc:mysql://127.0.0.1:3306/hibernatedb?useUnicode=true&amp;characterEncoding=UTF-8</property>
<property name="connection.username">hibernateuser</property>
<property name="connection.password">hibernateuser</property>

<!-- JDBC connection pool (use the built-in) -->
<property name="connection.pool_size">1</property>

<!-- SQL dialect -->
<property name="dialect">org.hibernate.dialect.MySQL5InnoDBDialect</property>

<!-- Disable the second-level cache  -->
<property name="cache.provider_class">org.hibernate.cache.internal.NoCacheProvider</property>

<!-- Echo all executed SQL to stdout -->
<property name="show_sql">true</property>

<!-- Drop and re-create the database schema on startup -->
<property name="hbm2ddl.auto">create</property>

</session-factory>
</hibernate-configuration>

# annotationsのTutorialに含まれているものを、
# hibernate-tutorials/annotations/src/test/resources/hibernate.cfg.xml
# MySQL用に書き直したものです。

次に、以下のように、メイン処理のクラスを変更します。
ここでは「select now()」というSQLの発行と結果表示をしています。

src/main/java/com/takemikami/hibernatesample/App.java

package com.takemikami.hibernatesample;

import java.util.List;

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

/**
* Hibernate ORM Sample!
*
*/
public class App
{
  public static void main( String[] args )
  {
    // configures settings from hibernate.cfg.xml
    SessionFactory sessionFactory = new Configuration()
      .configure()
      .buildSessionFactory();

    Session session = sessionFactory.openSession();
    List result = session.createSQLQuery("select now()").list();
    System.out.println(result);

    if ( sessionFactory != null ) {
      sessionFactory.close();
    }
  }
}

上記の変更後に、App.javaを選んで、
Run → Runメニューを実行すると、次のような実行結果がえられます。

hibernate07

ここまででHibernateからMySQLに接続できていることが確認できました。

永続化対象クラスの作成と動作確認

永続化対象のクラスを定義するため、
以下のような、ファイルを作成します。

src/main/java/com/takemikami/hibernatesample/Event.java

package com.takemikami.hibernatesample;

import java.util.Date;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
import javax.persistence.Table;
import javax.persistence.Temporal;
import javax.persistence.TemporalType;

import org.hibernate.annotations.GenericGenerator;

@Entity
@Table( name = "EVENTS" )
public class Event {
  private Long id;

  private String title;
  private Date date;

  public Event() {
    // this form used by Hibernate
  }

  public Event(String title, Date date) {
    // for application use, to create new events
    this.title = title;
    this.date = date;
  }

  @Id
  @GeneratedValue(generator="increment")
  @GenericGenerator(name="increment", strategy = "increment")
  public Long getId() {
    return id;
  }

  private void setId(Long id) {
    this.id = id;
  }

  @Temporal(TemporalType.TIMESTAMP)
  @Column(name = "EVENT_DATE")
  public Date getDate() {
    return date;
  }

  public void setDate(Date date) {
    this.date = date;
  }

  public String getTitle() {
    return title;
  }

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

作成したクラスの情報をHibernateの設定ファイルに追記します。

src/main/java/hibernate.cfg.xml

<!DOCTYPE hibernate-configuration PUBLIC
"-//Hibernate/Hibernate Configuration DTD 3.0//EN"
"http://www.hibernate.org/dtd/hibernate-configuration-3.0.dtd">
<hibernate-configuration>
<session-factory>
=途中省略=
<mapping class="com.takemikami.hibernatesample.Event"/>

</session-factory>
</hibernate-configuration>

以下のように、メイン処理のクラスを変更します。
ここでは、Eventオブジェクトを作成し永続化しています。

src/main/java/com/takemikami/hibernatesample/App.java

package com.takemikami.hibernatesample;

import java.util.Date;
import java.util.List;

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

/**
* Hibernate ORM Sample!
*
*/
public class App
{
  public static void main( String[] args )
  {
    // configures settings from hibernate.cfg.xml
    SessionFactory sessionFactory = new Configuration()
      .configure()
      .buildSessionFactory();

    // create a couple of events...
    Session session = sessionFactory.openSession();
    session.beginTransaction();
    session.save( new Event( "Our very first event!", new Date() ) );
    session.save( new Event( "A follow up event", new Date() ) );
    session.getTransaction().commit();
    session.close();

    // now lets pull events from the database and list them
    session = sessionFactory.openSession();
    session.beginTransaction();
    List result = session.createQuery( "from Event" ).list();
    for ( Event event : (List<Event>) result ) {
      System.out.println( "Event (" + event.getDate() + ") : " + event.getTitle() );
    }
    session.getTransaction().commit();
    session.close();

    if ( sessionFactory != null ) {
      sessionFactory.close();
    }
  }
}

最後にMySQL Workbenchからデータベースの状態を確認します。
MySQL Workbench 6.0 CEを起動し、
Database → Connect to Databaseメニューを選択すると、
Connect to Databaseダイアログが表示されます。

hibernate08

以下を指定して、MySQLに接続します。
 Username/Password: hibernateuser
 Default Schema: hibernatedb

Navigaterの
hibernatedb → Tables → eventのコンテキストメニューから、
「Select Rows - Limit 1000」を選ぶと、データ表示され、
対象オブジェクトがMySQL上に永続化されていることが確認できます。

hibernate09

hibernate10

以上で、基本的なhibernateでのオブジェクト永続化の流れができたので、
同様にして永続化したいクラスを追加していくことができるかと思います。

Discussion