NHibernate の設定(QuickStart)

最近になって“NHibernate ( Hibernate の .Net版)”というのがあるのを,初めて知りました。さっそく,QuickStart!!

  1. NHibernate を SourceForge からダウンロードする。この記事を書いている時点での最新バージョンは 1.2.1。

  2. VisualStudio 2005 でプロジェクトを作成する。ここではC#を選択。

  3. Hibernate アセンブリをプロジェクトに追加。ソリューションエクスプローラの「参照設定」を右クリック,メニューから「参照の追加」でアセンブリ NHibernate.dll を選択して追加する。VS2005 の場合はインストールディレクトリ下の bin/net-2.0 にあるものを使用。

  4. hibernate.cfg.xml という設定ファイルを新規作成し,コンフィギュレーションを記述。

    この例は MySQL を使用する場合。その他の例は,リファレンスマニュアルに詳しく記載している。リファレンスマニュアル(nhibernate_reference.pdf)は,インストールした場所の doc/ ディレクトリにある。
    <?xml version="1.0" encoding="utf-8" ?>
    <hibernate-configuration xmlns="urn:nhibernate-configuration-2.2">
    <!-- an ISessionFactory instance -->
    <session-factory>
    <property name="connection.provider">
    NHibernate.Connection.DriverConnectionProvider
    </property>
    <property name="connection.driver_class">
    NHibernate.Driver.MySqlDataDriver
    </property>
    <property name="connection.connection_string">
    Database=test;Data Source=localhost;User Id=TEST;Password=TEST
    </property>
    <property name="dialect">
    NHibernate.Dialect.MySQLDialect
    </property>

    <mapping file="config/Project.hbm.xml"/>

    </session-factory>
    </hibernate-configuration>
    これはlocalhost上のMySQLにあるtestデータベースへ,ユーザ名/パスワード=TEST/TESTで接続する例。

  5. 設定ファイルの参照をプログラム記述する。ここではリファレンスマニュアルで紹介されている方法を参考に,簡単なヘルパクラスを作成してみる。
    using System;
    using NHibernate;
    using NHibernate.Cfg;
    using log4net;

    namespace NHibernateTest {

    public sealed class NHibernateHelper {
    private static readonly string configfile = "hibernate.cfg.xml";
    private static ISessionFactory sessionFactory;
    private static ISession currentSession = null;

    static NHibernateHelper() {
    sessionFactory =
    new Configuration().Configure(configfile).BuildSessionFactory();
    }

    public static ISession GetCurrentSession() {
    if(sessionFactory != null && currentSession == null) {
    currentSession = sessionFactory.OpenSession();
    }
    return currentSession;
    }

    public static void CloseSession() {
    if(currentSession != null) {
    currentSession.Close();
    currentSession = null;
    }
    }
    }
    }

  6. 永続化対象にするクラスは,基本的に普通の定義をすればよいが,少し制限もある。
    (1) デフォルトコンストラクタを持っていること
    (2) 各メンバはプロパティ(アクセサ)を定義し,かつそれがvirtualであること
    簡単な定義をしてみる。
    namespace NHibernateTest {

    public class Project {
    public virtual int Id {
    get { return id; }
    set { id = value; }
    }
    private int id;

    public virtual string Name {
    get { return name; }
    set { name = value; }
    }
    private string name;
    }
    }

  7. 永続化クラスに対応するテーブルも作る。
    CREATE TABLE PROJECTS (
    ID BIGINT PRIMARY KEY NOT NULL AUTO_INCREMENT,
    NAME VARCHAR(40)
    );

  8. .Netクラスとテーブルを対応付けるマップファイルを作成する。
    <?xml version="1.0" encoding="utf-8" ?>
    <hibernate-mapping xmlns="urn:nhibernate-mapping-2.2"
    namespace="HibTest1" assembly="HibTest1">
    <class name="Project" table="Project">
    <id name="Id" column="id" type="Int32">
    <generator class="identity"/>
    </id>
    <property name="Name">
    <column name="NAME" length="40" />
    </property>
    </class>
    </hibernate-mapping>

  9. アクセスはこんな感じで。
      ISession session = NHibernateHelper.GetCurrentSession();
    ITransaction tx = session.BeginTransaction();

    Project project = new Project();
    project.Name = "test";
    session.Save(project);

    tx.Commit();
    これを実行すると,レコードが1つできる(はず)。

  10. log4net の定義も必要かもしれないので,。アプリケーション側で定義する。必要ならNHibernateに関する定義も行う。
    設定の詳細はlog4netの説明を参考にしてください。



タグ:Hibernate .net
この記事へのコメント
コメントを書く
お名前: [必須入力]

メールアドレス: [必須入力]

ホームページアドレス:

コメント:

認証コード: [必須入力]


※画像の中の文字を半角で入力してください。
※ブログオーナーが承認したコメントのみ表示されます。

この記事へのトラックバック
rank← ランキングはこちらをクリック!

×

この広告は180日以上新しい記事の投稿がないブログに表示されております。