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
- 動作するのに必要な設定ファイル
.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定義ファイルも同じく埋め込みリソースとしています。
以下、それぞれのファイルの内容です。
【プロパティファイル】
<?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です。
================================
過去の記事については、以下のページからご参照下さい。
- いろいろ備忘録日記まとめ
サンプルコードは、以下の場所で公開しています。
- いろいろ備忘録日記サンプルソース置き場