S2Dao SELECT文
スポンサード リンク1.SELECT文について
S2Daoでは、SQLを自動生成して発行してくれる機能と、別のテキストファイル(.sql)等に記載して
その情報を元にSQL発行してくれます。
今回は、SELECT文について記載したいと思います。
2.自動生成でSELECT文を発行する
S2Daoでは、マッピングしたtableからカラム等の情報を取得しそこからSQLを自動生成してくれます。
そのために必要なファイルは以下のようになります。
Bean(JavaBeans) |
tableのカラムを記載します。
このときに、カラム名とプロパティ名が対応している場合には自動的にマッピングされます。 (プロパティ名とカラム名から_(アンダースコア)を除いた名前は自動的に一致されます) 異なっているときにはCOLUMNアノテーションを用いて対応させる必要があります。 |
Dao(Data Access Object) |
インターフェースとして作成され、Bean(JavaBeans)と1対1の関係となっています。
永続化されるデータとロジックを分離して、Dao本来の目的であるBeanの永続化を行っています。 JavaBeansとの関連付けとメソッドの定義を記載します。 |
JavaBeanとDaoのサンプルは以下のようになります。 またJavaBeanと結びつけるDBのtableについては、初期設定にて使用した Projectテーブルを使用します。
Project.java - Bean(JavaBeans)
package snowhiro; import org.seasar.dao.annotation.tiger.Bean; /** * JavaBeanのサンプル。 * * */ // 対象のテーブルとのマッピングします。(PROJECTテーブルと結びつける) @Bean(table="PROJECT") public class Project { // tigerを使用しない場合にはいかように記載します。 // public static final String TABLE = "PROJECT"; // プロパティはpublic フィールドを使用しています。 public Integer id; // プロパティ名とカラム名が異なっている場合には、カラムアノテーションを記載します。 public static final String name_COLUMN = "PJNAME"; public String name; }
ProjectDao.java - Dao(Data Access Object)
package snowhiro; import java.util.List; 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(); }
ここで重要なポイントになるのはメソッド名です。
select文を発行するメソッドのメソッド名は、select〜〜といったようにselectから始まる必要があります。
後述しますが同様にupdate,delete文を発行する際には、メソッド名に規則があります.
次にProjectDaoを呼び出すためのメインクラスは以下のようになります。
今回はDaoのメソッドを呼び出して検索し、取得したリストを表示しています。
ProjectDao.java - Dao(Data Access Object)
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(); for (Project project : list) { System.out.print(" project.id : " + project.id); System.out.println(" project.name : " + project.name); } } }
設定ファイル等は、初期設定にて使用した構成を
そのまま使用します。
Projectテーブルの中身には2件のデータを登録してあります。
ではさそっくメインクラスから実行してみたいと思います。
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=1215618050227/0, BranchId=] DEBUG 物理的なコネクションを取得しました DEBUG 論理的なコネクションを取得しました。tx=[FormatId=4360, GlobalId=1215618050227/0, BranchId=] DEBUG 論理的なコネクションを閉じました。tx=[FormatId=4360, GlobalId=1215618050227/0, BranchId=] DEBUG 論理的なコネクションを取得しました。tx=[FormatId=4360, GlobalId=1215618050227/0, BranchId=] DEBUG 論理的なコネクションを閉じました。tx=[FormatId=4360, GlobalId=1215618050227/0, BranchId=] DEBUG 論理的なコネクションを取得しました。tx=[FormatId=4360, GlobalId=1215618050227/0, BranchId=] DEBUG SELECT PROJECT.id, PROJECT.PJNAME FROM PROJECT DEBUG 論理的なコネクションを閉じました。tx=[FormatId=4360, GlobalId=1215618050227/0, BranchId=] DEBUG トランザクションをコミットしました。tx=[FormatId=4360, GlobalId=1215618050227/0, BranchId=] project.id : 1 project.name : S2Dao project.id : 2 project.name : S2プロジェクト 入門
実行結果の中で、
DEBUG SELECT PROJECT.id, PROJECT.PJNAME FROM PROJECT
と出力されている部分が実際に発行されているSQLになります。 またその後に表示されている
project.id : 1 project.name : S2Dao project.id : 2 project.name : S2プロジェクト 入門
の部分が検索結果として取得した値をJavaBeanにマッピングし、その値を表示している部分になります。
このように1行もSQLを記載していないのですがDBに対してSQLを発行し、結果をJavaBeanにマッピング
してくれています。
次回以降はもう少し複雑なselect文の発行について記載してみたいと思います。
Seasar2 Topに戻る