スポンサード リンク

1.S2Dao update文

スポンサード リンク

今回はS2Daoのupdate文の自動生成について記載したいと思います。
insert文のときにも記載しましたが、update文の自動生成 も簡単に行うことができます。
update文を自動生成するためには、メソッドをupdateから始めるだけで 生成することができます。
でわさっそくサンプルを記載してみたいと思います。

ProjectDao.java

package snowhiro;

import java.util.List;

import org.seasar.dao.annotation.tiger.Arguments;
import org.seasar.dao.annotation.tiger.Query;
import org.seasar.dao.annotation.tiger.S2Dao;
import org.seasar.dao.annotation.tiger.SqlFile;

/**
 * Dao用のサンプルファイル。
 *
 * */
// Beanとのマッピングを記載します。
@S2Dao(bean = Project.class)
public interface ProjectDao {

    // 全件検索用メソッド
    @Query("ORDER BY ID")
    public List<Project> selectProject();

    /**
     * projectを更新する.
     * */
    public int updateProject(Project pj);
}
    

実際に記載した内容はたったの1行だけです。
戻り値にint型にした場合には、更新されたレコード数がセットされます。
次に対象のメソッドを呼び出すクラスは以下のようになります。

S2Dao_sample10.java

package snowhiro;

import java.util.List;
import java.util.Map;

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();
        System.out.println("登録前の全件表示 ");
        for (Project project : list) {
            System.out.print(" project.id : " + project.id);
            System.out.println(" project.name : " + project.name);
        }

        Project pj = new Project();
        pj.id = 5;
        pj.name = "プロジェクト名の更新後";
        pjDao.updateProject(pj);

        List<Project> listAfter = pjDao.selectProject();
        System.out.println("登録後の全件表示 ");
        for (Project project : listAfter) {
            System.out.print(" project.id : " + project.id);
            System.out.println(" project.name : " + project.name);
        }

    }
}
    

呼び出すクラスでは、Projectのテーブルに対応しているBeanの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=1220440380406/0, BranchId=]
DEBUG 物理的なコネクションを取得しました
DEBUG 論理的なコネクションを取得しました。tx=[FormatId=4360, GlobalId=1220440380406/0, BranchId=]
DEBUG 論理的なコネクションを閉じました。tx=[FormatId=4360, GlobalId=1220440380406/0, BranchId=]
DEBUG 論理的なコネクションを取得しました。tx=[FormatId=4360, GlobalId=1220440380406/0, BranchId=]
DEBUG 論理的なコネクションを閉じました。tx=[FormatId=4360, GlobalId=1220440380406/0, BranchId=]
DEBUG 論理的なコネクションを取得しました。tx=[FormatId=4360, GlobalId=1220440380406/0, BranchId=]
DEBUG SELECT PROJECT.id, PROJECT.PJNAME FROM PROJECT ORDER BY ID
DEBUG 論理的なコネクションを閉じました。tx=[FormatId=4360, GlobalId=1220440380406/0, BranchId=]
DEBUG トランザクションをコミットしました。tx=[FormatId=4360, GlobalId=1220440380406/0, BranchId=]
登録前の全件表示
 project.id : 1 project.name : S2Dao
 project.id : 2 project.name : S2プロジェクト 入門
 project.id : 3 project.name : S2Dao_SELECT句の説明
 project.id : 4 project.name : S2DaoでselectのWhere句を追加する
 project.id : 5 project.name : 自動生成用
DEBUG トランザクションを開始しました。tx=[FormatId=4360, GlobalId=1220440380406/1, BranchId=]
DEBUG 論理的なコネクションを取得しました。tx=[FormatId=4360, GlobalId=1220440380406/1, BranchId=]
DEBUG UPDATE PROJECT SET PJNAME = 'プロジェクト名の更新後' WHERE id = 5
DEBUG 論理的なコネクションを閉じました。tx=[FormatId=4360, GlobalId=1220440380406/1, BranchId=]
DEBUG トランザクションをコミットしました。tx=[FormatId=4360, GlobalId=1220440380406/1, BranchId=]
DEBUG トランザクションを開始しました。tx=[FormatId=4360, GlobalId=1220440380406/2, BranchId=]
DEBUG 論理的なコネクションを取得しました。tx=[FormatId=4360, GlobalId=1220440380406/2, BranchId=]
DEBUG SELECT PROJECT.id, PROJECT.PJNAME FROM PROJECT ORDER BY ID
DEBUG 論理的なコネクションを閉じました。tx=[FormatId=4360, GlobalId=1220440380406/2, BranchId=]
DEBUG トランザクションをコミットしました。tx=[FormatId=4360, GlobalId=1220440380406/2, BranchId=]
登録後の全件表示
 project.id : 1 project.name : S2Dao
 project.id : 2 project.name : S2プロジェクト 入門
 project.id : 3 project.name : S2Dao_SELECT句の説明
 project.id : 4 project.name : S2DaoでselectのWhere句を追加する
 project.id : 5 project.name : プロジェクト名の更新後
    

   「UPDATE PROJECT SET PJNAME = 'プロジェクト名の更新後' WHERE id = 5」のSQLが自動的に生成されて発行されています。
更新前のプロジェクト名は「自動生成用」となっていますが、実行後には「プロジェクト名の更新後」となっています。
またこのときwhere句は主キーの物が設定されています。



Seasar2 Topに戻る
inserted by FC2 system