iBatis.net + VB.net + postgresql 設定の最小限で実行

# このようなデータがあると想定
![image.png](https://qiita-image-store.s3.amazonaws.com/0/188794/9f96c2c7-fd41-1851-008f-d777ffbea8d6.png)



# IDを入力して該当レコードを抽出するアプリケーションを作成
![image.png](https://qiita-image-store.s3.amazonaws.com/0/188794/b6d4a1ae-5fcf-70eb-d3e5-3a1212f38d3d.png)

# 設定ファイルおよびソースファイル一覧
providers.config：postgresqlのプロバイダ設定ファイル
Employee.xml：SQLのマップファイル
SqlMap.config：プロバイダとSQLのマップファイルを指定
Employee.vb：SQLの実行結果を格納するオブジェクトの定義
Form1.vb：テスト用のプロジェクトソース

# providers.config
```xml
<?xml version="1.0"?>
<providers xmlns="http://ibatis.apache.org/providers"
	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">

  <clear/>

  <provider
  name="PostgreSql"
  description="PostgreSql, Npgsql provider V3.1.4.0"
  enabled="true"
  assemblyName="Npgsql, Version=3.1.4.0, Culture=neutral, PublicKeyToken=5d8b90d52f46fda7"
  connectionClass="Npgsql.NpgsqlConnection"
  commandClass="Npgsql.NpgsqlCommand"
  parameterClass="Npgsql.NpgsqlParameter"
  parameterDbTypeClass="NpgsqlTypes.NpgsqlDbType"
  parameterDbTypeProperty="NpgsqlDbType"
  dataAdapterClass="Npgsql.NpgsqlDataAdapter"
  commandBuilderClass="Npgsql.NpgsqlCommandBuilder"
  usePositionalParameters="false"
  useParameterPrefixInSql="true"
  useParameterPrefixInParameter="true"
  parameterPrefix=":"
  allowMARS="true"
  />

</providers>
```

# Employee.xml：
このファイルはクエリの実行結果とVBで定義されているクラスとの対応関係を記載します。
この例では、EmployeeResultという結果マップが、VBで定義されているEmployeeクラスと対応することは指定されています。
また、曖昧かもしれませんが、この例では、クエリ結果のレコードがEmployees（Employeeの複数形）テーブルのレコードと同じ構造であるため、結果保存用のVBクラス名はEmployee（Employeeの単数形）とされています。

＊：複数のテーブルをJOINして、複数テーブルに所属しているカラムを抽出する場合、結果表と同じ構造のresultMap（マップファイル）とVBクラスを作成すればよいです。

```xml
<?xml version="1.0" encoding="utf-8" ?>
<sqlMap namespace="EntityModel" xmlns="http://ibatis.apache.org/mapping"
        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">

  <alias>
    <typeAlias alias="Employee" type="IBatisTest03.Employee"/>
  </alias>

  <resultMaps>
    <!--db mapping-->
    <resultMap id="EmployeeResult" class="Employee">
      <result property="ID" column="ID"/>
      <result property="NAME" column="NAME"/>
    </resultMap>
  </resultMaps>

  <statements>

    <select id="GetEmployeeByID" parameterClass="Integer" resultMap="EmployeeResult">
     SELECT
     id,name
     FROM Employees
     where
     id = #idnum#
    </select>
  </statements>

</sqlMap>
```

# SqlMap.config
```xml
<?xml version="1.0" encoding="utf-8"?>
<sqlMapConfig 
  xmlns="http://ibatis.apache.org/dataMapper" 
  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">

  <providers resource="providers.config"/>
  
	<database>
		<provider name="PostgreSql"/>
		<dataSource name="PostgreSql" connectionString="Server=localhost;User id=xxxxxx;password=xxxxxx;Database=postgres;"/>
	</database>

	<sqlMaps>
		<sqlMap resource="Employee.xml" />
	</sqlMaps>

</sqlMapConfig>
```

# Employee.vb
```vb
Public Class Employee
    Dim _id As Integer
    Dim _name As String

    Public Property ID As Integer
        Get
            Return _id
        End Get
        Set(value As Integer)
            _id = value
        End Set
    End Property

    Public Property NAME As String
        Get
            Return _name
        End Get
        Set(value As String)
            _name = value
        End Set
    End Property
End Class
```

# Form1.vb
```vb
Imports IBatisNet.DataMapper

Public Class Form1
    Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
        Dim em As Employee
        em = Mapper.Instance().QueryForObject("GetEmployeeByID", Integer.Parse(TextBox1.Text))
        TextBox2.Text = em.ID.ToString()
        TextBox3.Text = em.NAME
    End Sub
End Class
```