iBatisの中のsqlMapsを使いデータベースの情報をSELECTで取得し、Javaのオブジェクトに格納しようと思います。
JDKは、jdk1.5.0_06、データベースはPostgres8.1を使ってみました。
iBatisは、2.1.5です。
iBatisのライブラリは、ここからダウンロードしてください。
ダウンロードしたファイルの中から、以下の2つを、クラスパスの通った場所に入れてください。

  • ibatis-common-2.jar
  • ibatis-sqlmap-2.jar

データベース接続用のJDBCドライバも忘れないように。
以上で最低限の準備は完了です。
iBatisはデータベースがないと試すこともできないので、とりあえず、以下のようなテーブル、データを準備しました。

ID NAME
1 User1
2 User2
3 User3

IDとNAMEだけを持った単純なものです。
このテーブルの情報を取得していきます。


まず、データベースの接続情報についてXMLファイルを作成します。
mappings/sql-map-config.xmlとして保存しました。
内容は前回書いたものと同じです。


<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE sqlMapConfig PUBLIC "-//ibatis.apache.org//DTD SQL Map Config 2.0//EN"
"http://ibatis.apache.org/dtd/sql-map-config-2.dtd">
<sqlMapConfig>
<transactionManager type="JDBC">
<dataSource type="SIMPLE">
<property value="org.postgresql.Driver" name="JDBC.Driver"/>
<property value="jdbc:postgresql://localhost/testdb" name="JDBC.ConnectionURL"/>
<property value="testuser" name="JDBC.Username"/>
<property value="testpassword" name="JDBC.Password"/>
</dataSource>
</transactionManager>
<sqlMap resource="mappings/User.xml" />
</sqlMapConfig>

基本的に、見たまんまです。。
ちょっとだけ説明すると

<transactionManager type=”JDBC”> type属性を利用してトランザクションマネージャを指定。
例では、JDBCを使ってトランザクション管理する。
使えるのは[JDBC][JTA][EXTERNAL]の3つ
<dataSource type=”SIMPLE”> type属性を利用してDataSourceを作成するクラスを指定
。SIMPLEはiBatisで準備されているSimpleDataSourceFactoryを使う。
DBCPとかも指定できる(ライブラリとか設定情報は少し増えますが。)
<sqlMap resource=”mappings/User.xml” /&gt; resource属性を利用してマッピングファイルの場所を指定。
クラスパスが通っている場所からの相対パスで指定。
例では、mappings/User.xmlをマッピングファイルとして指定しています。

つぎば、データベースとのマッピングファイル(mappings/User.xml)です。
今回は単純なSELECTだけなので、以下のような感じです。


<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE sqlMap PUBLIC "-//ibatis.apache.org//DTD SQL Map 2.0//EN"
"http://ibatis.apache.org/dtd/sql-map-2.dtd">
<sqlMap namespace="User">
<select id="getUser" resultClass="sample.iBatis.User">
SELECT
ID AS id,
NAME AS name
FROM USER_TABLE
WHERE ID=#value#
</select>
</sqlMap>

見たまんまなのですが、<select id=”getUser” resultClass=”sample.iBatis.User”>のところだけ説明します。
<select>についてですが、これは、SQLのSELECTを実行するためのタグです。
id=”getUser”は、呼び出すためのキー情報になります。
resultClass=”sample.iBatis.User”は、SELECTで取得した情報を格納するクラスを指定します。
他にもいろいろありますが、とりあえず今回はデータをSELECTで取ってくることが目的なので、最低限だけで。。

で、次は、データを格納するためのクラスです。
idとnameをフィールドとして持ち、それらのSetter、Getterがあるだけです。


package sample.iBatis;
public class User {
private Long id;
private String name;
public Long getId() {
return this.id;
}
public void setId(Long aId) {
this.id = aId;
}
public String getName() {
return this.name;
}
public void setName(String aName) {
this.name = aName;
}
@Override
public String toString(){
return "ID[" + this.id + "]:"
+ "Name[" + this.name + "]";
}
}

最後に、sqlMapsを利用してデータベースから、データを取得する部分を作成します。


package sample;
import java.io.Reader;
import sample.iBatis.User;
import com.ibatis.common.resources.Resources;
import com.ibatis.sqlmap.client.SqlMapClient;
import com.ibatis.sqlmap.client.SqlMapClientBuilder;
public class TestMain {
public static void main(String[] args) throws Exception {
String RESOURCE_FILE = "mappings/sql-map-config.xml";
Reader reader = Resources.getResourceAsReader(RESOURCE_FILE);
SqlMapClient sqlMap = SqlMapClientBuilder.buildSqlMapClient(reader);
// SELECT
User user = (User) sqlMap.queryForObject("getUser", new Long(1));
System.out.println(user);
}
}

特に説明するほどのこともないようなコードです。。
Resources.getResourceAsReaderで設定ファイルを読み込み、
SqlMapClientBuilder.buildSqlMapClient(reader);で、sqlMapの情報を組み立てます。
sqlMap.queryForObject(“getUser”, new Long(1));の部分で、データベースからデータを取得しています。
“getUser”は、マッピングファイル内で記述したidの情報です。
new Long(1)は。。。。今回のSELECTでidをキーとしたSELECTなので。。

実行すると、コンソールに以下のように表示されます。
ID[1]:Name[User1]

とりあえず、SELECTを実行してデータベースの情報を取得し、Javaのオブジェクトに入れることができました。
次のときには、INSERT、UPDATE、DELETEの仕方をアップする予定です。

ブログ内の関連する記事