« 基本情報技術者 | メイン | 遠方より友来る 亦楽しからずや »

iBatisでSELECT

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はデータベースがないと試すこともできないので、とりあえず、以下のようなテーブル、データを準備しました。
IDNAME
1User1
2User2
3User3
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" />; 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の仕方をアップする予定です。

ブログ内の関連する記事

トラックバック

このエントリーのトラックバックURL:
http://www.taosoftware.co.jp/mt/mt-tb.cgi/10

この一覧は、次のエントリーを参照しています: iBatisでSELECT:

» iBatisでINSERT,UPDATE,DELETE from Taosoftware
sqlMapを利用し、INSERT、UPDATE、DELETEを行ってみます。 ... [詳しくはこちら]

コメントを投稿

(いままで、ここでコメントしたことがないときは、コメントを表示する前にこのブログのオーナーの承認が必要になることがあります。承認されるまではコメントは表示されません。そのときはしばらく待ってください。)