読者です 読者をやめる 読者になる 読者になる

いろいろ備忘録日記

主に .NET と Python絡みのメモを公開しています。

iBatis.NET奮闘記-001 (インストール及びVisualStudioでの環境設定)

C# ibatis

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
    • Castle.DynamicProxy.dll
    • IBatisNet.Common.dll
    • IBatisNet.Common.Logging.Log4Net.dll
    • IBatisNet.DataMapper.dll
    • log4net.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定義ファイルも同じく埋め込みリソースとしています。


以下、それぞれのファイルの内容です。
【プロパティファイル】

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



================================
過去の記事については、以下のページからご参照下さい。

サンプルコードは、以下の場所で公開しています。