S2Dao SELECT文 QUERYアノテーション
スポンサード リンク1.SELECT文について2
前回のSELECT文では、条件を指定しない状態でselect文の自動生成を行い発行していました。
ですが現実には条件を指定しないで発行することはないので、今回はselect文に条件(where句)を追加
して発行してみたいと思います。
S2Daoの自動生成にてWhere句を使うのはQUERYアノテーションを使用します。
QUERYアノテーションの書き方は以下のようになります。
tigerアノテーションを使用する場合
@Query("WHERE句ORDER BY句");
tigerアノテーションを使用しない場合
public static final String メソッド名_QUERY = "WHERE句ORDER BY句";
早速サンプルを記載してみたいと思います。
今回のサンプルでは、自動生成したSQLに条件としてIDが2〜3のものを、IDの順番でソートし取得しています。
使用するテーブル等の条件は前回と同じになります。
以上の条件で自動生成するメソッドを前回作成したProjectDaoに追加します。
追加後の内容は以下のようになります。
ProjectDao.java
package snowhiro; import java.util.List; import org.seasar.dao.annotation.tiger.Query; import org.seasar.dao.annotation.tiger.S2Dao; /** * Dao用のサンプルファイル。 * * */ // Beanとのマッピングを記載します。 @S2Dao(bean = Project.class) public interface ProjectDao { // tigerアノテーションを使用しない場合には以下のように記載します。 // public static final Class BEAN = Project.class; // 全件検索用メソッド public List<Project> selectProject(); // 条件追加 SQL メソッド @Query("ID BETWEEN ? AND ? ORDER BY ID") public List<Project> selectWhereProject(String startId, String endId); // Queryアノテーションをtigerアノテーションを使用しない場合には以下のように記載します。 //public static final String selectWhereProject_QUERY = "ID BETWEEN ? AND ? ORDER BY ID"; }
Queryアノテーションでは、Where句を記載せずに条件を記載していきます。
ID BETWEEN ? AND ? ORDER BY IDの“?”の文字をバインド変数といい、
メソッドの引数の値が順に”?”の部分に代入されます。
次にDaoのメソッドを呼び出すためのMainクラスを記載します。
S2Dao_sample10.java
package snowhiro; import java.util.List; import org.seasar.framework.container.S2Container; import org.seasar.framework.container.factory.SingletonS2ContainerFactory; /** * S2Daoのサンプルメインクラス */ public class S2Dao_sample10 { // 設定ファイルのPath private static final String PATH = "snowhiro/s2Dao.dicon"; /** * メインクラス * @param args 引数 */ public static void main(String[] args) { System.out.println("S2Dao_sample10 開始"); // 設定ファイルを読み込む. SingletonS2ContainerFactory.setConfigPath(PATH); // 初期化する. SingletonS2ContainerFactory.init(); // コンテナを取得する. S2Container container = SingletonS2ContainerFactory.getContainer(); ProjectDao pjDao = (ProjectDao) container.getComponent(ProjectDao.class); // List<Project> list = pjDao.selectProject(); List<Project> list = pjDao.selectWhereProject("2", "3"); for (Project project : list) { System.out.print(" project.id : " + project.id); System.out.println(" project.name : " + project.name); } } }
Mainクラスでは、前回していたメソッドの部分をコメントアウトし、今回のメソッドを有効にしています。
またメソッドの引数として、Where句の条件のIDのBETWEEN開始値と終了値をセットしています。
対象となるDBのテーブルとなるPROJECTの中身は以下のようになります。
それでは早速実行してみたいと思います。
S2Dao_sample10 開始 DEBUG S2Containerを作成します。path=snowhiro/s2Dao.dicon DEBUG S2Containerを作成します。path=dao.dicon DEBUG S2Containerを作成します。path=j2ee.dicon DEBUG S2Containerを作成します。path=jta.dicon DEBUG S2Containerを作成しました。path=jta.dicon DEBUG S2Containerを作成します。path=jdbc.dicon DEBUG S2Containerを作成しました。path=jdbc.dicon DEBUG S2Containerを作成しました。path=j2ee.dicon DEBUG S2Containerを作成しました。path=dao.dicon DEBUG S2Containerを作成しました。path=snowhiro/s2Dao.dicon INFO Running on [ENV]product, [DEPLOY MODE]Normal Mode DEBUG トランザクションを開始しました。tx=[FormatId=4360, GlobalId=1216133416678/0, BranchId=] DEBUG 物理的なコネクションを取得しました DEBUG 論理的なコネクションを取得しました。tx=[FormatId=4360, GlobalId=1216133416678/0, BranchId=] DEBUG 論理的なコネクションを閉じました。tx=[FormatId=4360, GlobalId=1216133416678/0, BranchId=] DEBUG 論理的なコネクションを取得しました。tx=[FormatId=4360, GlobalId=1216133416678/0, BranchId=] DEBUG 論理的なコネクションを閉じました。tx=[FormatId=4360, GlobalId=1216133416678/0, BranchId=] DEBUG 論理的なコネクションを取得しました。tx=[FormatId=4360, GlobalId=1216133416678/0, BranchId=] DEBUG SELECT PROJECT.id, PROJECT.PJNAME FROM PROJECT WHERE ID BETWEEN '2' AND '3' ORDER BY ID DEBUG 論理的なコネクションを閉じました。tx=[FormatId=4360, GlobalId=1216133416678/0, BranchId=] DEBUG トランザクションをコミットしました。tx=[FormatId=4360, GlobalId=1216133416678/0, BranchId=] project.id : 2 project.name : S2プロジェクト 入門 project.id : 3 project.name : S2Dao_SELECT句の説明
DEBUG SELECT PROJECT.id, PROJECT.PJNAME FROM PROJECT WHERE ID BETWEEN '2' AND '3' ORDER BY ID
の部分で今回発行されたSQLが確認できます。
また取得された結果は以下のようになり、予想通りの結果が出力されています。
project.id : 2 project.name : S2プロジェクト 入門 project.id : 3 project.name : S2Dao_SELECT句の説明
以上のように、Queryアノテーションを使用することにより、簡単に条件を追記してSQLを生成することができます。
Seasar2 Topに戻る