S2Dao SQLコメント 埋め込み変数コメント
スポンサード リンク1.SQLコメント(埋め込み変数コメント)
前回はSQLファイルの中身をSQLコメントを用いて動的に値を変更してました。
今回は同様にSQLコメントを用いて、より特殊なSQLを発行できるようにしてみたいと思います。
2.埋め込み変数コメント
埋め込み変数コメントは、引数に設定された値をそのまま文字列としてセットします。
使用例では、order by の対象の項目動的に変更するサンプルになっています。
SQLファイルは以下のようになります。
発行するSQLファイル(ProjectDao_selectUseSqlFileProject4.sql)
SELECT ID ,PJNAME FROM PROJECT ORDER BY /*$orderByKey*/PJNAME /*$sortKey*/ASC
今のSQLでは、PJNAMEの昇順でソートしています。
ここで重要なポイントは変数名の前に「$(ドル)」がついていることです。
$がついていることによって、値がセットされた際に''等で囲まれずに直接値がセットされます。
SQLツールで実行した結果は以下のようになります。
次に対象のSQLファイルを呼び出すメソッドを記載します。
ProjectDao.java
package snowhiro; import java.util.List; import org.seasar.dao.annotation.tiger.Arguments; import org.seasar.dao.annotation.tiger.S2Dao; import org.seasar.dao.annotation.tiger.SqlFile; /** * Dao用のサンプルファイル。 * * */ // Beanとのマッピングを記載します。 @S2Dao(bean = Project.class) public interface ProjectDao { // SQLファイル 使用メソッド @SqlFile // SQLファイルがない場合にエラーを出力するアノテーション @Arguments({"orderByKey","sortKey"}) // メソッドの引数名を指定するアノテーション public List<Project> selectUseSqlFileProject4(String orderByKey, String sortKey); }
次に対象のメソッドを呼び出すためのメインクラスを記載してみます。
引数として、order by のkeyにID,ソート順に、DESCを設定しています。
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); String orderByKey = "ID"; String sortKey = "DESC"; List>Project< list = pjDao.selectUseSqlFileProject4(orderByKey, sortKey); for (Project project : list) { System.out.print(" project.id : " + project.id); System.out.println(" project.name : " + project.name); } } }
では実際に実行してみたいと思います。
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=1216914203107/0, BranchId=] DEBUG 物理的なコネクションを取得しました DEBUG 論理的なコネクションを取得しました。tx=[FormatId=4360, GlobalId=1216914203107/0, BranchId=] DEBUG 論理的なコネクションを閉じました。tx=[FormatId=4360, GlobalId=1216914203107/0, BranchId=] DEBUG 論理的なコネクションを取得しました。tx=[FormatId=4360, GlobalId=1216914203107/0, BranchId=] DEBUG 論理的なコネクションを閉じました。tx=[FormatId=4360, GlobalId=1216914203107/0, BranchId=] DEBUG 論理的なコネクションを取得しました。tx=[FormatId=4360, GlobalId=1216914203107/0, BranchId=] DEBUG SELECT ID ,PJNAME FROM PROJECT ORDER BY ID DESC DEBUG 論理的なコネクションを閉じました。tx=[FormatId=4360, GlobalId=1216914203107/0, BranchId=] DEBUG トランザクションをコミットしました。tx=[FormatId=4360, GlobalId=1216914203107/0, BranchId=] project.id : 4 project.name : S2DaoでselectのWhere句を追加する project.id : 3 project.name : S2Dao_SELECT句の説明 project.id : 2 project.name : S2プロジェクト 入門 project.id : 1 project.name : S2Dao
実際に発行されているSQLは以下のようになっています。
SELECT ID ,PJNAME FROM PROJECT ORDER BY ID DESC
SQLツールで設定されていた、Order by とsortKeyではなく、メインメソッドにて設定された値が設定されて
SQLが発行されています。
このように対象のSQLを動的に変更することができます。
Seasar2 Topに戻る