
最終回 流れるようにSQLっぽくO/RマッピングできるS2JDBC
株式会社パワーエッジ
新田 智啓(newta)
2008/3/18
S2JDBCでDB操作をしてみよう
次に、DBとJavaをつなぐ操作をするクラスを作成します。今回はDoltengで生成されたテーブルにアクセスするサービスクラスを利用します。
■ DBアクセスの準備も自動生成!
Doltengで生成された、サービスクラスはAbstractServiceクラスを継承して作られます。AbstractServiceクラスはS2AbstractServiceクラスが継承されています。この中には、「JdbcManager」という変数が宣言されており、この変数を使ってDBアクセスを行います。DeptServiceクラスは、下記のように定義されています。
public class DeptService extends AbstractService<Dept> |
Deptテーブルにアクセスするサービスなので、AbstractServiceのGenerics(ジェネリック型)にDeptクラスを指定しています。これだけで、Deptテーブルにアクセスを操作するクラスができてしまいます。
![]() |
| 図1 自動生成されたサービスクラス |
また、Doltengで生成されたファイルには、主キーでアクセスできる「findById」というメソッドが追加されています。これで、DBにアクセスする準備ができました。
■ DB操作クラスで利用できるデフォルトのメソッド
DBに関連付いたサービスクラスで利用できるメソッドは表のようになっています。
| 表 DB操作クラスにデフォルトで生成されるメソッド | |||||||||||||||||||||
|
■ selectメソッドを利用した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定義ファイルを利用してSQLを実行 |
selectBySqlFile(Class<T2> baseClass,
String path); |
SQLファイルを利用したものについては、ここでは説明を割愛します。公式ページを参照してみてください。SQLファイルを使う方法も業務を使用する際は非常に有用であり、強力な機能を持っています。
S2JDBCを利用した超簡単なトランザクション管理
S2JDBCを利用したトランザクション管理について説明します。実は、いままで見てきたソースコードで、すでにトランザクション管理されています。しかし、コードにはまったく出てきていませんね。
■ もうDB操作にtry/catch/finally文はいらない!
これは実は、トランザクションはDIコンテナであるSeasar 2のDI機能によって、見えないところで管理されているからです。これは非常にお手軽です。実際にJavaでDB操作の開発を行ったことがある人ならば、その便利さが分かると思いますが、いままでDBにアクセスするときには何度となくtry、catch、finallyを書いているソースコードもあったと思います。
トランザクションの開始や終了などは決まったことであり、そこはフレームワークにコントロールを任せてしまえばよいのです。自分が書くソースコードは、実際にやりたいロジックの部分だけでよいのです。
■ コミットとロールバックのタイミング
現在のトランザクションタイミングはActionが実行されてからActionが正常終了するまでです。もしActionがExceptionを発生させた場合、ロールバックが実行されます。Exceptionで終了せず、正常にメソッドが終了した場合、コミットが実行されます。
次ページでは、トランザクション管理の仕組みや便利な自動生成ツール「S2JDBC-Gen」について説明します。
| Index | ||||||||
|
||||||||
Java初心者が超俊敏にWebアプリを作る方法 バックナンバー 連載インデックスへ»
- 第1回 1分でWebアプリを作れるEclipseプラグイン「Dolteng」
- 第2回 StrutsのXML地獄から開発者を解放するSAStruts
- 第3回 サーバ再起動不要のSMART deployとバリデーション
- 第4回 EL式を拡張したSAStrutsタグ/ファンクションは超便利
- 最終回 流れるようにSQLっぽくO/RマッピングできるS2JDBC
| Java Solution全記事一覧 |
TechTargetジャパン
- Scalaのパッケージ、アクセス修飾子、オブジェクト継承 (2012/5/22)
インポート、パッケージオブジェクト、抽象クラス/抽象メソッド、オーバーライド、final、シールドクラスなども - 基幹系システムでCloud SQLは使えるか試してみた (2012/5/17)
サンプルとしてMRPシステムを作成して動かし、「再帰呼び出し」などのパフォーマンスを測定して検証してみます - アジャイル管理ツール9選+Pivotal Tracker入門 (2012/5/14)
群雄割拠のアジャイルプロジェクト管理ツールを9つ紹介し、特に注目を集めているPivotal Trackerの基本的な使い方を解説します - サーバサイドJSやJavaでWebアプリが作れるXPages (2012/5/11)
Notes/Dominoの資産をサーバサイドJavaScriptやJavaで操作し、HTMLやJavaScript、CSSをUIにできる技術を紹介
|
|
キャリアアップ
スポンサーからのお知らせ
- - PR -
イベントカレンダー
- - PR -


