公式HP

http://wiki.nhibernate.org/display/NH/Home

ダウンロード

http://sourceforge.net/project/showfiles.php?group_id=73818

インストール

  • nhibernate と NHibernateContrib をダウンロード
  • ダウンロードしたZIPファイルを展開
  • 適当な場所に置く
    例:nhibernate → C:\NHibernate / NHibernateContrib → C:\NHibernateContrib
  • VS.NETでプロジェクトを作る
  • nhibernateのbin/NHibernate.dllを参照に追加

Quick Start

共通

  • NHibernateのDBを作り、usersテーブルを作る
    use NHibernate
    go
    
    CREATE TABLE users (
      LogonID nvarchar(20) NOT NULL default '0',
      Name nvarchar(40) default NULL,
      Password nvarchar(20) default NULL,
      EmailAddress nvarchar(40) default NULL,
      LastLogon datetime default NULL,
      PRIMARY KEY  (LogonID)
    )
    go
  • Windowsアプリケーション プロジェクトを作る
  • bin/NHibernate.dllを参照に追加
  • テーブルクラスを作る(class名:users/ファイル名:users.cs)
    using System;
    
    namespace NHibernate.Examples.QuickStart
    { 
    	public class User
    	{
    		private string id;
    		private string userName;
    		private string password;
    		private string emailAddress;
    		private DateTime lastLogon;
    
    
    		public User()
    		{
    		}
    
    		public string Id 
    		{
    			get { return id; }
    			set { id = value; }
    		}
    
    		public string UserName 
    		{
    			get { return userName; }
    			set { userName = value; }
    		}
    
    		public string Password 
    		{
    			get { return password; }
    			set { password = value; }
    		}
    
    		public string EmailAddress 
    		{
    			get { return emailAddress; }
    			set { emailAddress = value; }
    		}
    
    		public DateTime LastLogon 
    		{
    			get { return lastLogon; }
    			set { lastLogon = value; }
    		}
    		
    	}
    }
  • マッピングファイルを作る(ファイル名:User.hbm.xml)
    <?xml version="1.0" encoding="utf-8" ?>
    <hibernate-mapping xmlns="urn:nhibernate-mapping-2.0">
    	<class name="NHibernate.Examples.QuickStart.User, NHibernate.Examples" table="users">
    		<id name="Id" column="LogonID" type="String" length="20"> 
    			<generator class="assigned" /> 
    		</id> 
    		<property name="UserName" column= "Name" type="String" length="40"/> 
    		<property name="Password" type="String" length="20"/> 
    		<property name="EmailAddress" type="String" length="40"/>
    		<property name="LastLogon" type="DateTime"/>
    	</class>
    </hibernate-mapping>
  • マッピングファイルのプロパティで、ビルドアクションを[埋め込まれたリソース]にする
    &ref(): File not found: "BuildAction.PNG" at page "NHibernate";
  • アプリケーション構成ファイルを作る(プロジェクト→コンポーネントの追加→アプリケーション構成ファイル)
    <?xml version="1.0" encoding="utf-8" ?>
    <configuration>
      <configSections>
        <section 
          name="nhibernate" 
          type="System.Configuration.NameValueSectionHandler, System, Version=1.0.5000.0,Culture=neutral, PublicKeyToken=b77a5c561934e089" 
        />
      </configSections>
    	
      <nhibernate>
        <add 
          key="hibernate.connection.provider"          
          value="NHibernate.Connection.DriverConnectionProvider" 
        />
        <add 
          key="hibernate.dialect"                      
          value="NHibernate.Dialect.MsSql2000Dialect" 
        />
        <add 
          key="hibernate.connection.driver_class"          
          value="NHibernate.Driver.SqlClientDriver" 
        />
        <add 
          key="hibernate.connection.connection_string" 
          value="Server=localhost;initial catalog=nhibernate;Integrated Security=SSPI" 
        />
      </nhibernate>
    </configuration>

Insert

  • NHibernateの使用宣言
    using NHibernate;
    using NHibernate.Cfg;
  • アセンブリ内のマッピングファイルを全部読み込む
    Configuration cfg = new Configuration();
    cfg.AddAssembly("NHibernate.Examples");
  • セッション確立(DB接続)
    ISessionFactory factory = cfg.BuildSessionFactory();
    ISession session = factory.OpenSession();
  • トランザクションの開始
    ITransaction transaction = session.BeginTransaction();
  • Userの情報を入れたクラスを生成
    User newUser = new User();
    newUser.Id = "joe_cool";
    newUser.UserName = "Joseph Cool";
    newUser.Password = "abc123";
    newUser.EmailAddress = "joe@cool.com";
    newUser.LastLogon = DateTime.Now;
  • DBへ書き出し(Insert文実行)
    session.Save(newUser);
  • トランザクションのコミット
    transaction.Commit();
  • セッションのクローズ(DB切断)
    session.Close();

Select(全件)

  • NHibernateの使用宣言
    using NHibernate;
    using NHibernate.Cfg;
  • アセンブリ内のマッピングファイルを全部読み込む
    Configuration cfg = new Configuration();
    cfg.AddAssembly("NHibernate.Examples");
  • セッション確立(DB接続)
    ISessionFactory factory = cfg.BuildSessionFactory();
    ISession session = factory.OpenSession();
  • テーブル読み込み
    IList userList = session.CreateCriteria(typeof(User)).List();
  • セッションのクローズ(DB切断)
    session.Close();
  • リスト表示
    foreach(User user in userList)
    {
    	System.Diagnostics.Debug.WriteLine(user.Id + ":" +user.UserName +":"+ user.LastLogon);
    }

Select(条件付き)

  • NHibernateの使用宣言
    using NHibernate;
    using NHibernate.Cfg;
  • アセンブリ内のマッピングファイルを全部読み込む
    Configuration cfg = new Configuration();
    cfg.AddAssembly("NHibernate.Examples");
  • セッション確立(DB接続)
    ISessionFactory factory = cfg.BuildSessionFactory();
    ISession session = factory.OpenSession();
  • LastLogon?が2004/4/14 20:00以降のデータをテーブルから読み込み
    IList recentUsers = session.CreateCriteria(typeof(User))
    				.Add(Expression.Expression.Gt("LastLogon", new DateTime(2004, 03, 14, 20, 0, 0)))
    				.List();
  • セッションのクローズ(DB切断)
    session.Close();
  • リスト表示
    foreach(User user in userList)
    {
    	System.Diagnostics.Debug.WriteLine(user.Id + ":" +user.UserName +":"+ user.LastLogon);
    }

更新(Update)

  • NHibernateの使用宣言
    using NHibernate;
    using NHibernate.Cfg;
  • アセンブリ内のマッピングファイルを全部読み込む
    Configuration cfg = new Configuration();
    cfg.AddAssembly("NHibernate.Examples");
  • セッション確立(DB接続)
    ISessionFactory factory = cfg.BuildSessionFactory();
    ISession session = factory.OpenSession();
  • トランザクションの開始
    ITransaction transaction = session.BeginTransaction();
  • データ読み込み
    User joeCool = (User)session.Load(typeof(User), "joe_cool");
  • 内容の更新
    joeCool.LastLogon = DateTime.Now;
  • DB書き出し
    session.Flush();
  • トランザクションのコミット
    transaction.Commit();
  • セッションのクローズ(DB切断)
    session.Close();

マッピング

  • 1対多
    • 1側
      <?xml version="1.0" encoding="utf-8" ?>
      <hibernate-mapping xmlns="urn:nhibernate-mapping-2.0" auto-import="true" assembly="NHibernateTest" namespace="Business.Data">
      	<class name="SsttIssue" table="SSTT_ISSUE">
      
      		<composite-id>
      			<key-property name="CompanyCd" type="String" >
      				<column name="COMPANY_CD" />
      			</key-property>
      			<key-property name="IssueNo" type="String" >
      				<column name="ISSUE_NO" />
      			</key-property>
      		</composite-id>
      
      		<property column="ISSUE_KBN" type="String" name="IssueKbn" not-null="true" length="2" />
      		<property column="STAT_KBN" type="String" name="StatKbn" not-null="true" length="2" />
      		<property column="ISSUE_OUTLINE" type="String" name="IssueOutline" length="256" />
      		<property column="ISSUE_OUTLINE_02" type="String" name="IssueOutline02" length="256" />
      		<property column="LOCK_TIME" type="DateTime" name="LockTime" />
      		<property column="LOCK_SUID" type="Decimal" name="LockSuid" />
      		<property column="TICKET_ID" type="String" name="TicketId" length="50" />
      		<property column="DEL_FLG" type="String" name="DelFlg" length="1" />
      		<property column="INS_SUID" type="Decimal" name="InsSuid" />
      		<property column="INS_DATE" type="DateTime" name="InsDate" />
      		<property column="UPD_SUID" type="Decimal" name="UpdSuid" />
      		<property column="UPD_DATE" type="DateTime" name="UpdDate" />
      		
      		<bag name="ssrtIssueRela">
      			<key>
      				<column name="ISSUE_COMPANY_CD" /> ← 多側のキーのカラム名
      				<column name="ISSUE_NO" />
      			</key>
      			<one-to-many class="SsrtIssueRela" />
      		</bag>
      		
      	</class>
      </hibernate-mapping>
  • 多側
    <?xml version="1.0" encoding="utf-8" ?>
    <hibernate-mapping xmlns="urn:nhibernate-mapping-2.0" auto-import="true" assembly="NHibernateTest" namespace="Business.Data">
    	<class name="SsrtIssueRela" table="SSRT_ISSUE_RELA">
    
    		<composite-id>
    			<key-property name="IssueCompanyCd" type="String" >
    				<column name="ISSUE_COMPANY_CD" />
    			</key-property>
    			<key-property name="IssueNo" type="String" >
    				<column name="ISSUE_NO" />
    			</key-property>
    			<key-property name="BusinessTrnCompanyCd" type="String" >
    				<column name="BUSINESS_TRN_COMPANY_CD" />
    			</key-property>
    			<key-property name="BusinessTrnKbn" type="String" >
    				<column name="BUSINESS_TRN_KBN" />
    			</key-property>
    			<key-property name="BusinessTrnNo" type="String" >
    				<column name="BUSINESS_TRN_NO" />
    			</key-property>
    		</composite-id>
    
    		<property column="INS_SUID" type="Decimal" name="InsSuid" />
    		<property column="INS_DATE" type="DateTime" name="InsDate" />
    		<property column="UPD_SUID" type="Decimal" name="UpdSuid" />
    		<property column="UPD_DATE" type="DateTime" name="UpdDate" />
    
    		<many-to-one name="ssttIssue" class="SsttIssue">
    				<column name="ISSUE_COMPANY_CD" /> ← 多側のキーのカラム名
    				<column name="ISSUE_NO" />
    		</many-to-one>
    
    	</class>
    </hibernate-mapping>
DB関連
(books)


トップ   編集 凍結 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: Tue, 15 Jul 2008 00:29:37 JST (3322d)