iBatis.NETは、以前このブログ内にてしばらく奮闘記を記述していましたiBatisの.NET版です。
本家のページには、他にもRuby用のiBatisなどが存在しています。
前に記述しましたjava版のibatisについての記事は、以下の場所にまとめてあります。
基本的に、java版と.net版に大きな違いはありません。
どちらかを知っていれば大分楽です。
で、IBatis.NETとは、どのようなライブラリかといいますと、簡単に言うと
という感じです。Javaの方で有名なHibernate, toplinkのようなORマッピングとしての
詳細な機能はありませんが、XMLでマッピングファイルをガチガチに設定する必要もありません。
なんらかのデータ取得およびデータ変更の処理を考える時、モデルオブジェクト同士のやり取りよりも
先にSQLが頭に浮かぶ人とかに向いているライブラリです。当然SQLをそのまま記述できるので
クエリのパフォーマンスなども最大限活かすことも出来ます。JOIN(inner, outer共に) も、し放題です。
java版と.net版は良く似ていますので、さらっとjava版をみていただいた方が分かりやすいかもしれません。
今回は、ibatis.netのインストールとvisual studioのプロジェクトへの設定について記述します。
まず、インストール。
IBatis.NETのバイナリモジュールは以下の場所からダウンロードします。
インストール自体は、java版と同じく簡単です。
ダウンロードしたモジュールを展開するだけです。
中には、動作に必要なDLLや設定ファイルのサンプルなどが存在しています。
なお、.NETのバージョン2.0を使用している場合は展開したモジュールの
の方を使用します。
では、次にプロジェクトでの設定方法です。
IBatis.NETでは、以下のDLLおよび設定ファイルが必要になります。
java版の方とほぼ同じです。
- 参照設定が必要なDLL
- 動作するのに必要な設定ファイル
- providers.config
- properties.config
- SqlMap.config
- 各種のSQL定義ファイル(XXXXX.ibatis.xml)
.NET版に存在するproviders.configファイルは、ibatisが内部でどのデータベースプロバイダを
使用するかどうかの設定がなされているファイルです。
中を開いてみると分かりますが、いろんなプロバイダの設定が既に記述されています。
デフォルトは、sqlServer1.1になっていますので、自分で利用するプロバイダの以下の属性の値を
変更します。
なお、その際はデフォルトでenabledになっているsqlserver1.1の方をenabled=falseにするように
しておきましょう。
次に、配布モジュール内に入っている以下のxsdファイルをVisualStudioの以下の場所に置きます。
それにより、VS上でSqlMap設定ファイルを記述する際に補完が聞くようになります。
ここまで、後は基本的にSqlMap.configファイルを作成し、各SQL定義ファイルを作成する
事になります。
サンプルとして、現在私の方がよく使っている基本的な作成方針を以下に画像で
貼り付けておきます。
私の場合は、基本的に
はEmbeddedConfigというフォルダを作成してその下に埋め込みリソースとしておいています。
後、各SQL定義ファイルは、Modelsというフォルダを作成し、その下においています。
SQL定義ファイルも同じく埋め込みリソースとしています。
以下、それぞれのファイルの内容です。
【プロパティファイル】
<?xml version="1.0" encoding="utf-8" ?>
<!--
プロパティファイルとなる。
ルート要素は、settingsとし、
後は、内部にadd要素をいくつでも追加できる。
java版のpropertiesファイルと同じ目的で利用できる。
-->
<settings>
<add key="datasource" value=".\SQLEXPRESS"/>
<add key="datasourceName" value="IBatisNetSampleDB"/>
<add key="database" value="ibatisnet_sample_db"/>
<add key="integratedSecurity" value="True"/>
<add key="provider" value="sqlServer2.0"/>
</settings>
【プロバイダー設定ファイル】
<?xml version="1.0" encoding="utf-8"?>
<providers
xmlns="http://ibatis.apache.org/providers"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<!--
デフォルトでは、sqlServer1.1のみが有効になっており、さらにdefault=trueとなっている.
使用したいプロバイダの設定を抜き出し、enabled=trueに設定すること。
-->
<provider
name="sqlServer2.0"
enabled="true"
description="Microsoft SQL Server, provider V2.0.0.0 in framework .NET V2.0"
assemblyName="System.Data, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089"
connectionClass="System.Data.SqlClient.SqlConnection"
commandClass="System.Data.SqlClient.SqlCommand"
parameterClass="System.Data.SqlClient.SqlParameter"
parameterDbTypeClass="System.Data.SqlDbType"
parameterDbTypeProperty="SqlDbType"
dataAdapterClass="System.Data.SqlClient.SqlDataAdapter"
commandBuilderClass=" System.Data.SqlClient.SqlCommandBuilder"
usePositionalParameters = "false"
useParameterPrefixInSql = "true"
useParameterPrefixInParameter = "true"
parameterPrefix="@"
allowMARS="false"
/>
</providers>
【SQLMAP設定ファイル】
<?xml version="1.0" encoding="utf-8"?>
<sqlMapConfig
xmlns="http://ibatis.apache.org/dataMapper"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<!--
プロパティファイルの設定. 埋め込みリソースの場合は以下のように指定する。
-->
<properties embedded="Gsf.Samples.IBatisNet.EmbeddedConfig.properties.config, Sample001"/>
<!--
DataMapperの基本的な設定。
・useStatementNamespaces: QueryForListメソッドなどの使用の際に、クエリの指定時に名前空間の指定を必須とするかどうか。
・cacheModelsEnabled: モデルのキャッシュ機能を行なうかどうか。
・useReflectionOptimizer: リフレクションも用いた最適化を行なうかどうか。
・validateSqlMap: このSqlMap.configファイルの構文検証を行なうかどうか。
-->
<settings>
<setting useStatementNamespaces="true"/>
<setting cacheModelsEnabled="true"/>
<setting useReflectionOptimizer="true"/>
<setting validateSqlMap="true"/>
</settings>
<!--
プロバイダ設定ファイルの設定。埋め込みリソースの場合は以下のように指定する。
-->
<providers embedded="Gsf.Samples.IBatisNet.EmbeddedConfig.providers.config, Sample001"/>
<!--
使用するデータベースの設定。データソースの指定は複数行なう事が出来る。
-->
<database>
<provider name="${provider}"/>
<dataSource
name="${datasourceName}"
connectionString="Data Source=${datasource};Initial Catalog=${database};Integrated Security=${integratedSecurity}"/>
</database>
<!--
SQL定義ファイルの設定。
作成したSQL定義ファイルは、この場所で指定しないと有効になりません。
-->
<!--
<sqlMaps>
<sqlMap embedded="XXXX.ibatis.xml, Sample001"/>
</sqlMaps>
-->
</sqlMapConfig>
てことで、次からは簡単なSQLの発行方法からやりたいと思います。
次回からは、以下のテーブル構造のデータを相手にデータの操作をおこなってみようと
思っています。対象となるデータベースはSQL Serverです。