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はデータベースがないと試すこともできないので、とりあえず、以下のようなテーブル、データを準備しました。
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” /> | 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の仕方をアップする予定です。
コメント
コメントを投稿