NHibernateによるデータ登録
次に、NHibernateを使ったデータの登録を行ってみよう。前節の内容を理解できていれば、データの登録は極めて直感的に実現できる。
以下のサンプル・コードは、ユーザーから入力された値をbooksテーブルに新規登録するためのWebフォームの例だ。
<%@ Page ContentType="text/html" Language="C#" %>
<%@ Import Namespace="NHibernate" %>
<%@ Import Namespace="NHibernate.Cfg" %>
<%@ Import Namespace="Com.Msn.Wings" %>
<script runat="Server">
public void btnSubmit_Click(Object sender, EventArgs e) {
// NHibernateのセッションを開く
Configuration config = new Configuration();
config.AddAssembly("Book");
ISessionFactory factory = config.BuildSessionFactory();
ISession sess = factory.OpenSession();
// トランザクションを開始
ITransaction trans = sess.BeginTransaction();
Book book = new Book();
book.Isbn = txtIsbn.Text;
book.Title = txtTitle.Text;
book.Price = Int32.Parse(txtPrice.Text);
book.Publish = txtPublish.Text;
book.Published = DateTime.Parse(txtPublished.Text);
// Bookオブジェクトの内容をデータベースに反映
sess.Save(book);
// トランザクションの確定
trans.Commit();
sess.Close();
}
</script>
<html>
<head>
<title>NHibernateによるデータ登録</title>
</head>
<body>
<form runat="Server">
<table border="0">
<tr>
<th align="right">ISBNコード:</th>
<td><asp:TextBox id="txtIsbn"
runat="Server" Columns="20" /></td>
</tr>
<tr>
<th align="right">書名:</th>
<td><asp:TextBox id="txtTitle"
runat="Server" Columns="40" /></td>
</tr>
<tr>
<th align="right">価格:</th>
<td><asp:TextBox id="txtPrice"
runat="Server" Columns="5" />円</td>
</tr>
<tr>
<th align="right">出版社:</th>
<td><asp:TextBox id="txtPublish"
runat="Server" Columns="15" /></td>
</tr>
<tr>
<th align="right">配本日:</th>
<td><asp:TextBox id="txtPublished"
runat="Server" Columns="15" /></td>
</tr>
<tr>
<td colspan="2">
<asp:Button id="btnSubmit" runat="Server"
Text="登録" OnClick="btnSubmit_Click" />
</td>
</tr>
</table>
</form>
</body>
</html>
|
<%@ Page ContentType="text/html" Language="VB" %>
<%@ Import Namespace="NHibernate" %>
<%@ Import Namespace="NHibernate.Cfg" %>
<%@ Import Namespace="Com.Msn.Wings" %>
<script runat="Server">
Public Sub btnSubmit_Click(sender As Object, e As EventArgs)
' NHibernateのセッションを開く
Dim config As New NHibernate.Cfg.Configuration()
config.AddAssembly("Book")
Dim factory As ISessionFactory = config.BuildSessionFactory()
Dim sess As ISession = factory.OpenSession()
' トランザクションを開始
Dim trans As ITransaction = sess.BeginTransaction()
Dim book As New Book()
book.Isbn = txtIsbn.Text
book.Title = txtTitle.Text
book.Price = Int32.Parse(txtPrice.Text)
book.Publish = txtPublish.Text
book.Published = DateTime.Parse(txtPublished.Text)
' Bookオブジェクトの内容をデータベースに反映
sess.Save(book)
' トランザクションの確定
trans.Commit()
sess.Close()
End Sub
</script>
<html>
<head>
<title>NHibernateによるデータ登録</title>
</head>
<body>
<form runat="Server">
<table border="0">
<tr>
<th align="right">ISBNコード:</th>
<td><asp:TextBox id="txtIsbn"
runat="Server" Columns="20" /></td>
</tr>
<tr>
<th align="right">書名:</th>
<td><asp:TextBox id="txtTitle"
runat="Server" Columns="40" /></td>
</tr>
<tr>
<th align="right">価格:</th>
<td><asp:TextBox id="txtPrice"
runat="Server" Columns="5" />円</td>
</tr>
<tr>
<th align="right">出版社:</th>
<td><asp:TextBox id="txtPublish"
runat="Server" Columns="15" /></td>
</tr>
<tr>
<th align="right">配本日:</th>
<td><asp:TextBox id="txtPublished"
runat="Server" Columns="15" /></td>
</tr>
<tr>
<td colspan="2">
<asp:Button id="btnSubmit" runat="Server"
Text="登録" OnClick="btnSubmit_Click" />
</td>
</tr>
</table>
</form>
</body>
</html>
|
|
NHibernateを利用してデータ登録を行うサンプル・プログラム |
(上:C#版:「nhibernate_input_cs.aspx」、下:VB.NET版「nhibernate_input_vb.aspx」) |
データの登録(あるいは更新、削除)を行う場合、あらかじめトランザクションを開始しておく必要がある。NHibernateでトランザクションを管理するのは、ITransactionオブジェクトの役割だ。ITransactionオブジェクトは、ISession.BeginTransactionメソッドで生成できる。
あとは、永続化クラスBookの対応するプロパティに入力値をセットし、ISession.Saveメソッドで、これをデータベースに反映するだけだ。トランザクションのコミットには、ITransaction.Commitメソッドを呼び出せばよい。ちなみに、トランザクションをロールバックする場合には、ITransaction.Rollbackメソッドを使用する。
検索処理の場合と同様、開発者側はSQLをまったく意識せずにオブジェクトの操作のみでデータの操作が可能になることがお分かりいただけるだろう。
以上を理解したら、さっそくサンプルを実行してみよう。以下のように入力された書籍情報がデータベースに反映されていれば成功だ。
|
データ登録サンプル・プログラムの実行例 |
フォームからの入力値をデータベースに登録する。データベースの反映結果は前節のサンプル・プログラムで確認できる。 |
なお、データの更新や削除を行う場合も、ほとんど同じ要領で行うことができる。以下は、booksテーブルの主キーであるisbnフィールドで該当するレコード(Bookクラス)を取得し、その内容を更新/削除するサンプル・コードだ(C#の場合)。
ITransaction trans = sess.BeginTransaction();
Book book = (Book)sess.Load(typeof(Book),"4-7981-0722-0");
book.Title = "Community Server入門";
sess.Update(book);
trans.Commit();
|
|
NHibernateでデータの更新を行うサンプル・コード(C#) |
ITransaction trans = sess.BeginTransaction();
Book book = (Book)sess.Load(typeof(Book), "4-7981-0722-0");
sess.Delete(book);
trans.Commit();
|
|
NHibernateでデータの削除を行うサンプル・コード(C#) |
それぞれ実際に実行し、データベースから該当するデータが更新/削除されていることを確認してほしい。
■
以上、ASP.NETで実践するO/Rマッピング(NHibernate編)ということで、NHibernateを使ったデータベース・アクセスについて解説してきた。実際のサンプル・プログラムを示すことによって、O/Rマッピングが具体的にどのようなものであるかをご理解いただけたと思う。
本特集の後編となる次回の「iBATIS.NET編」では、.NET向けのもう1つの代表的なO/Rマッピング・ツールである「iBATIS.NET」を紹介する予定だ。同じO/Rマッピングであっても今回のNHibernateとは少し方式が異なっており、これまた興味深いツールとなっている。ご期待いただきたい。
Insider.NET 記事ランキング
本日
月間