iBatis.NETは、以前このブログ内にてしばらく奮闘記を記述していましたiBatisの.NET版です。

本家のページには、他にもRuby用のiBatisなどが存在しています。


前に記述しましたjava版のibatisについての記事は、以下の場所にまとめてあります。

基本的に、java版と.net版に大きな違いはありません。

どちらかを知っていれば大分楽です。


で、IBatis.NETとは、どのようなライブラリかといいますと、簡単に言うと

SQLを定義ファイルにそのまま書いて、それをマッピングしてくれるライブラリ

という感じです。Javaの方で有名なHibernate, toplinkのようなORマッピングとしての

詳細な機能はありませんが、XMLマッピングファイルをガチガチに設定する必要もありません。


なんらかのデータ取得およびデータ変更の処理を考える時、モデルオブジェクト同士のやり取りよりも

先にSQLが頭に浮かぶ人とかに向いているライブラリです。当然SQLをそのまま記述できるので

クエリのパフォーマンスなども最大限活かすことも出来ます。JOIN(inner, outer共に) も、し放題です。


java版と.net版は良く似ていますので、さらっとjava版をみていただいた方が分かりやすいかもしれません。

今回は、ibatis.netのインストールvisual studioのプロジェクトへの設定について記述します。

まず、インストール


IBatis.NETのバイナリモジュールは以下の場所からダウンロードします。

インストール自体は、java版と同じく簡単です。

ダウンロードしたモジュールを展開するだけです。

中には、動作に必要なDLLや設定ファイルのサンプルなどが存在しています。


なお、.NETのバージョン2.0を使用している場合は展開したモジュールの

binaries-2.0

の方を使用します。


では、次にプロジェクトでの設定方法です。


IBatis.NETでは、以下のDLLおよび設定ファイルが必要になります。

java版の方とほぼ同じです。

  • 参照設定が必要なDLL
  • 動作するのに必要な設定ファイル
    • providers.config
    • properties.config
    • SqlMap.config
    • 各種のSQL定義ファイル(XXXXX.ibatis.xml)

.NET版に存在するproviders.configファイルは、ibatisが内部でどのデータベースプロバイダ

使用するかどうかの設定がなされているファイルです。

中を開いてみると分かりますが、いろんなプロバイダの設定が既に記述されています。

デフォルトは、sqlServer1.1になっていますので、自分で利用するプロバイダの以下の属性の値を

変更します。

enabled=true

なお、その際はデフォルトでenabledになっているsqlserver1.1の方をenabled=falseにするように

しておきましょう。


次に、配布モジュール内に入っている以下のxsdファイルをVisualStudioの以下の場所に置きます。

それにより、VS上でSqlMap設定ファイルを記述する際に補完が聞くようになります。

SqlMap.xsd
SqlMapConfig.xsd
${VisualStudioのホームディレクトリ}\Xml\Schemas

ここまで、後は基本的にSqlMap.configファイルを作成し、各SQL定義ファイルを作成する

事になります。

サンプルとして、現在私の方がよく使っている基本的な作成方針を以下に画像で

貼り付けておきます。

私の場合は、基本的に

はEmbeddedConfigというフォルダを作成してその下に埋め込みリソースとしておいています。

後、各SQL定義ファイルは、Modelsというフォルダを作成し、その下においています。

SQL定義ファイルも同じく埋め込みリソースとしています。

f:id:gsf_zero1:20070930235255p:image


以下、それぞれのファイルの内容です。

プロパティファイル】

<?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です。

f:id:gsf_zero1:20070930235617p:image