データの取得を行ってみます。
サンプルはこちらからダウンロードできます。
※BLOGの都合上、文中のタグ用の括弧はすべて全角文字にしてあります。
組み込み
まず、以下のページからiBatisをダウンロードします。Ver3のベータ版が出ているようですが、ここではVer2のibatis-2.3.4.726.zipをダウンロードします。
http://ibatis.apache.org/java.cgi
ダウンロードしたファイルを展開し、ibatis-2.3.4.726.jarをWebContext/libフォルダにコピーします。
次に、xmlフォルダ(またはsrcフォルダ)にSqlMapConfig.xmlを作成します。
SqlMapConfig.xmlにはDB接続の情報や使用する追加で読み込むSqlMap.xmlファイルのパスを指定します。
ここでは、外部のJDBCドライバが不要なODBC経由でデータベースに接続します。
ODBC経由でのDB接続の設定は以下のようになります。(一部抜粋)
<property name="JDBC.Driver" value="sun.jdbc.odbc.JdbcOdbcDriver" /> <property name="JDBC.ConnectionURL" value="jdbc:odbc:struts2_sample" /> <property name="JDBC.Username" value="struts2_sample" /> <property name="JDBC.Password" value="struts2_sample" />
ODBCデータソースアドミニストレータでデータソース「struts2_sample」を追加します。
なお、MySQLの場合の設定は以下のようになります。(一部抜粋)
<property name="JDBC.Driver" value="com.mysql.jdbc.Driver" /> <property name="JDBC.ConnectionURL" value="jdbc:mysql://localhost/struts2_sample" /> <property name="JDBC.Username" value="struts2_sample" /> <property name="JDBC.Password" value="struts2_sample" />
データの準備
以下のSQL文をデータベースアクセスクライアント等で実行し、あらかじめテーブルの作成とデータの追加を行います。
なお、ここで使用しているSQL文はMySQL用のものです。
create table sample_user_tables(user_name varchar(100), mail_address varchar(200), login_count integer, primary key(user_name));
INSERT INTO sample_user_tables
(
user_name,
mail_address,
login_count
)
VALUES
(
'hoge',
'hoge@example.com',
'3'
)
;
INSERT INTO sample_user_tables
(
user_name,
mail_address,
login_count
)
VALUES
(
'piyo',
'piyo@example.com',
'10'
)
;
iBatisの初期化
iBatisを使用するにはSqlMapClientクラスを作成する必要があります。SqlMapClientクラスは一度作成したら使い回しができるので、
ここではシングルトンのクラスSqlMapClientHolderを作成し初回だけ初期化を行うようにします。
public class SqlMapClientHolder {
public static final String RESOURCE_PATH = "SqlMapConfig.xml";
private static SqlMapClient sqlMapClient;
static {
try {
Reader reader = Resources.getResourceAsReader(RESOURCE_PATH);
sqlMapClient = SqlMapClientBuilder.buildSqlMapClient(reader);
} catch (IOException ioe) {
throw new RuntimeException("SqlMapConfig.xml load failed.", ioe);
}
}
public static SqlMapClient getInstance() {
return sqlMapClient;
}
}
DAOの作成
データベースにアクセスするデータアクセスクラス(DAO)を作成します。まず、SQL文を記述した設定ファイルをXML(SqlMap.xml)で作成します。
ファイル名は自由に設定できますが、xmlフォルダ(またはsrcフォルダ)といった
コンパイル対象のフォルダにおく必要があります。
作成したファイルのパスはSqlMapConfig.xmlにsqlMapタグで指定します。
<sqlMap resource="sqlmap/SqlMap-SampleQuery.xml" />
SqlMap-SampleQuery.xmlの内容は以下のようになります。
<?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>
<resultMap id="SampleQueryDto"
class="com.googlecode.tecproglab.struts2_sample.dto.SampleQueryDto">
<result property="userName" column="user_name" />
<result property="mailAddress" column="mail_address" />
<result property="loginCount" column="login_count" />
</resultMap>
<select id="queryAll" resultMap="SampleQueryDto">
SELECT
user_name,
mail_address,
login_count
FROM
sample_user_tables
ORDER BY
user_name
</select>
</sqlMap>
selectタグにはSQL文(ここではSELECT文)を記述します。
また、SampleQueryDtoに取得したデータを保存するDTOクラスを指定します。
resultMapタグにはDTOクラスのクラス名を指定します。
resultタグにはDTOクラスの要素とSQLで取得した列名の組み合わせを指定します。
データを保存するDTOクラスを作成します。
DTOのメンバー変数(userName)はresultMapタグの指定と厳密に一致させます。
//一部抜粋
public class SampleQueryDto {
private String userName;
public String getUserName() {
return userName;
}
public void setUserName(String userName) {
this.userName = userName;
}
//以下省略
}
実際の処理を行うDAOを作成します。
といっても、SqlMapClientを取得してiBatisを呼び出すだけです。
queryForListの引数にはselectタグに記述した名前を指定します。
SQLを実行した結果としてDTOのリストが返ります。
public class SampleQueryDao {
public List<SampleQueryDto> queryAll() {
SqlMapClient sqlMapClient = SqlMapClientHolder.getInstance();
try {
List<SampleQueryDto> list = (List<SampleQueryDto>) sqlMapClient
.queryForList("queryAll");
return list;
} catch (SQLException se) {
throw new RuntimeException(se);
}
}
}
動作確認
iBatisはWebサーバが不要のため、以下のようなテストコードで動作確認が行えます。Eclipse上から実行するには以下のように行います。
1.main関数を記述したクラスをプロジェクトエクスプローラーから右クリックします。
2.コンテキストメニューのRun As>Java Applicationをクリックします。
public static void main(String[] args) {
SampleQueryDao dao = new SampleQueryDao();
List<SampleQueryDto> list = dao.queryAll();
for (SampleQueryDto dto : list) {
System.out.println(dto);
}
}
0 件のコメント:
コメントを投稿