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” /&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">SELECTID AS id,NAME AS nameFROM USER_TABLEWHERE 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;}@Overridepublic 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);// SELECTUser 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の仕方をアップする予定です。

ブログ内の関連する記事


コメント

このブログの人気の投稿

島へ移住の話【炊飯】

ドローンプログラミング体験教室を伊豆大島の小学校でしてきました

情報処理安全確保支援士登録証のカード型が届きました。