JavaのWebアプリケーション開発フレームワークによる、Webサイト開発の顛末記です。

EclipseのMavenを使った、Spring-MVC、Thymeleaf、MyBatis 等のプログラミングテクニックを、
備忘録的に記録しています。実際に動くソースコードを多用して説明していますので、
これからEclipseや、Spring-MVCを始めたいと思っている人にとって、少しでも参考になれば幸いです。
Spring-MVCの散歩道 > SpringMVC の小径 > 第8歩 あと一歩 DB連携 > 邂逅の頂

package jp.dip.arimodoki.blogic;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Scope;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;

import jp.dip.arimodoki.mapper.UserMapper;
import jp.dip.arimodoki.model.PromenadeFormIf;
import jp.dip.arimodoki.model.dto.UserIf;

/**
* User情報操作ビジネスロジック
*/
@Scope("prototype")         //魔よけのお札
@Service        //コンポーネントスキャン用のおまじない
public class BlUser implements BlUserIf {

    @Autowired
    private UserMapper      usrMapper;  //MapperインターフェースをDIする

    //リクエストパラメータFormBean(コントローラから引き継ぎ)
    private PromenadeFormIf formPromenade;

    /**
     * FormBeanの継承
     * コントローラでからリクエストパラメータFormBeanを継承する
     * @param form リクエストパラメータFormBean
     */
    public void setForm(PromenadeFormIf form) {
        this.formPromenade = form;
    }

    /**
     * リクエストされたdbcommandTypeにより
     * DB処理タイプを振り分ける
     */
    public void dbProc() throws Exception {
        //DB処理タイプを取得する
        int dbcommandType = this.formPromenade.getDbcommandType();
        //viewから渡されたDTOを取得する
        UserIf user = this.formPromenade.getUser();
        //好きなものラジオボタン選択値を取得する
        String[] checkVals = this.formPromenade.getCheckVals();
        //好きなものが一個選択されているので、ビジネスモデルに継承する
        if(checkVals != null && checkVals.length > 0) user.setCheckVal(checkVals[0]);

        switch(dbcommandType) {
        case 1:         //User情報検索
            this.getUser();
            break;
        case 2:         //User情報新規追加
            this.insertUser();
            break;
        case 3:         //User情報更新
            this.updateUser();
            break;
        case 4:         //User情報削除
            this.deleteUser();
            break;
        default:            //エラー
            new Exception("dbcommandTypeが不正です");
        }
    }

    /**
     * User情報を取得する
     * @exception useridが未指定の場合は、exceptionをスローする
     */
    @Transactional(readOnly=true)       //DBトランザクション状態設定(read only)
    public void getUser() throws Exception {
        //viewから指定されたuserIDを取得する
        int userid = this.formPromenade.getUser().getUserid();
        if(userid == 0) {
            //useridが未指定の場合はExceptionをスローする
            new Exception("useridが未指定です");
        }

        //User情報をuseridでDBを検索する
        //(Mapperインターフェースメソッドを呼び出す)
        UserIf user = usrMapper.getUser(userid);
        if(user == null) return;	//検索結果がない
        //検索結果をFormBeanにセット
        this.formPromenade.setUser(user);

        //好きなもの
        String checkVal = user.getCheckVal();
        //好きなもの 結果表示用
        this.formPromenade.setFavorite(checkVal);
        //好きなものラジオボタン復元
        String checkVals[] = new String[1];
        checkVals[0] = checkVal;
        this.formPromenade.setCheckVals(checkVals);
    }

    /**
     * User情報を新規追加する
     */
    @Transactional(rollbackFor = Exception.class)   //DBトランザクション状態設定(read/write)
    public void insertUser() throws Exception {
        //viewから渡されたDTOを取得する
        UserIf user = this.formPromenade.getUser();

        //User情報をDBに新規追加する
        //(Mapperインターフェースメソッドを呼び出す)
        usrMapper.insertNewUser(user);
    }

    /**
     * User情報を更新する
     * @exception useridが未指定の場合は、exceptionをスローする
     */
    @Transactional(rollbackFor = Exception.class)   //DBトランザクション状態設定(read/write)
    public void updateUser() throws Exception {
        //viewから指定されたuserIDを取得する
        UserIf user = this.formPromenade.getUser();
        if(user.getUserid() == 0) {
            //useridが未指定の場合はExceptionをスローする
            new Exception("useridが未指定です");
        }

        //useridで決定されるUser情報でDBを更新する
        //(Mapperインターフェースメソッドを呼び出す)
        usrMapper.updateUser(user);
    }

    /**
     * User情報を削除する
     * @exception useridが未指定の場合は、exceptionをスローする
     */
    @Transactional(rollbackFor = Exception.class)   //DBトランザクション状態設定(read/write)
    public void deleteUser() throws Exception {
        //viewから指定されたuserIDを取得する
        int userid = this.formPromenade.getUser().getUserid();
        if(userid == 0) {
            //useridが未指定の場合はExceptionをスローする
            new Exception("useridが未指定です");
        }

        //useridで決定されるUser情報をDBから削除する
        //(Mapperインターフェースメソッドを呼び出す)
        usrMapper.deleteUser(userid);
    }

}