次に、DBとJavaをつなぐ操作をするクラスを作成します。今回はDoltengで生成されたテーブルにアクセスするサービスクラスを利用します。
Doltengで生成された、サービスクラスはAbstractServiceクラスを継承して作られます。AbstractServiceクラスはS2AbstractServiceクラスが継承されています。この中には、「JdbcManager」という変数が宣言されており、この変数を使ってDBアクセスを行います。DeptServiceクラスは、下記のように定義されています。
public class DeptService extends AbstractService<Dept> |
Deptテーブルにアクセスするサービスなので、AbstractServiceのGenerics(ジェネリック型)にDeptクラスを指定しています。これだけで、Deptテーブルにアクセスを操作するクラスができてしまいます。
また、Doltengで生成されたファイルには、主キーでアクセスできる「findById」というメソッドが追加されています。これで、DBにアクセスする準備ができました。
DBに関連付いたサービスクラスで利用できるメソッドは表のようになっています。
メソッド名 | 概要 | 戻り値 |
---|---|---|
findAll() | 全件取得 | List<T> |
findByCondition(BeanMap conditions) | 条件を指定して取得 | List<T> |
getCount() | 件数取得 | long |
insert(T entity) | 登録 | int |
update(T entity) | 更新(@Idを付加した値(主キー)を利用して) | int |
delete(T entity) | 削除(@Idを付加した値(主キー)を利用して) | int |
表 DB操作クラスにデフォルトで生成されるメソッド |
DB操作の例として、selectメソッドを利用したDB検索・参照の方法を解説します。S2JDBCでは、SQLライクな「流れるようなインターフェイス」を採用しています。
Deptテーブルからデータを取得する例 |
select() |
この例ですと、idが11もしくは22のDeptデータの一覧が取得できます。一覧を取得したいときには、getResultList()メソッドを最後に付けて、SQLを実行します。
Deptテーブルからデータを1件だけ取得する例 |
select() |
SQLの結果が必ず1件になる場合は、getSingleResult()を最後に付けてSQLを実行します。
Javaで書いているにもかかわらず、SQLを理解していれば、何が取得したいかが一目で分かります。また、外部ファイルなどの設定SQLファイルなども必要ありません。
ただ、複雑なSQLを実行する際や実際のSQLでパフォーマンスチューニングをしたいケースもあると思います。そのような、必要なときのみ外部にSQLを置き、SQLを実行できます。その際に利用できるメソッドが用意されています。外部SQLを利用するときには、以下のメソッドを利用します。
SQL定義ファイルを利用してSQLを実行 |
selectBySqlFile(Class<T2> baseClass,
String path); |
SQLファイルを利用したものについては、ここでは説明を割愛します。公式ページを参照してみてください。SQLファイルを使う方法も業務を使用する際は非常に有用であり、強力な機能を持っています。
S2JDBCを利用したトランザクション管理について説明します。実は、いままで見てきたソースコードで、すでにトランザクション管理されています。しかし、コードにはまったく出てきていませんね。
これは実は、トランザクションはDIコンテナであるSeasar 2のDI機能のDI機能によって、見えないところで管理されているからです。これは非常にお手軽です。実際にJavaでDB操作の開発を行ったことがある人ならば、その便利さが分かると思いますが、いままでDBにアクセスするときには何度となくtry、catch、finallyを書いているソースコードもあったと思います。
トランザクションの開始や終了などは決まったことであり、そこはフレームワークにコントロールを任せてしまえばよいのです。自分が書くソースコードは、実際にやりたいロジックの部分だけでよいのです。
現在のトランザクションタイミングはActionが実行されてからActionが正常終了するまでです。もしActionがExceptionを発生させた場合、ロールバックが実行されます。Exceptionで終了せず、正常にメソッドが終了した場合、コミットが実行されます。
次ページでは、トランザクション管理の仕組みや便利な自動生成ツール「S2JDBC-Gen」について説明します。
Copyright © ITmedia, Inc. All Rights Reserved.