iBatisでSELECT
iBatisの中のsqlMapsを使いデータベースの情報をSELECTで取得し、Javaのオブジェクトに格納しようと思います。
JDKは、jdk1.5.0_06、データベースはPostgres8.1を使ってみました。
iBatisは、2.1.5です。
iBatisのライブラリは、ここからダウンロードしてください。 ダウンロードしたファイルの中から、以下の2つを、クラスパスの通った場所に入れてください。
IDとNAMEだけを持った単純なものです。
このテーブルの情報を取得していきます。
JDKは、jdk1.5.0_06、データベースはPostgres8.1を使ってみました。
iBatisは、2.1.5です。
iBatisのライブラリは、ここからダウンロードしてください。 ダウンロードしたファイルの中から、以下の2つを、クラスパスの通った場所に入れてください。
- ibatis-common-2.jar
- ibatis-sqlmap-2.jar
| ID | NAME |
|---|---|
| 1 | User1 |
| 2 | User2 |
| 3 | User3 |
まず、データベースの接続情報についてXMLファイルを作成します。
mappings/sql-map-config.xmlとして保存しました。
内容は前回書いたものと同じです。
ちょっとだけ説明すると
つぎば、データベースとのマッピングファイル(mappings/User.xml)です。 今回は単純なSELECTだけなので、以下のような感じです。
<select>についてですが、これは、SQLのSELECTを実行するためのタグです。
id="getUser"は、呼び出すためのキー情報になります。
resultClass="sample.iBatis.User"は、SELECTで取得した情報を格納するクラスを指定します。
他にもいろいろありますが、とりあえず今回はデータをSELECTで取ってくることが目的なので、最低限だけで。。
で、次は、データを格納するためのクラスです。
idとnameをフィールドとして持ち、それらのSetter、Getterがあるだけです。
最後に、sqlMapsを利用してデータベースから、データを取得する部分を作成します。
特に説明するほどのこともないようなコードです。。 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の仕方をアップする予定です。
内容は前回書いたものと同じです。
<?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の仕方をアップする予定です。


