目次 > 第2章 Server(Web)版チュートリアル > 2.6 登録処理 > 2.6.4 ビジネスロジッククラスの作成とDAOの設定
2.6.4 ビジネスロジッククラスの作成とDAOの設定
Server(Web)版では、データベースアクセスを簡略化するDataAccessObject(以下、DAOとする)のインタフェースと、Spring + iBATIS 連携機能を利用し
たデフォルト実装を提供している。
DAOを利用することで、JDBC API およびRDBMS 製品やO/Rマッピングツールに依存する処理をビジネスロジックから分離することができる。
以下に、Server(Web)版が提供するDAOを示す。
インタフェース | デフォルト実装 | 説明 |
QueryDAO | QueryDAOiBatisImpl | データを検索(SELECT)する際に使用する。 |
UpdateDAO | UpdateDAOiBatisImpl | データを挿入・更新・削除(INSERT・UPDATE・DELETE)する際に使用する。 |
StoredProcedureDAO | StoredProcedureDAOiBatisImpl | ストアドプロシジャを発行する際に使用する。 |
本項では、入力の「ID」が既にテーブルに存在する場合は「登録画面」に戻り、重複していない場合は入力情報をテーブルに登録し、「結果画面」に遷移するビジネスロジッククラスを実装する。チェック処理と登録処理で、QueryDAOとUpdateDAOを利用する。
備考
メッセージ表示の実装については次項「次項:2.6.5 メッセージの設定」にて説明する。
手順
本項では以下の作業が必要となる。
(1) ビジネスロジッククラスの作成
入力の「ID」が既にテーブルに存在する場合は、重複していない場合は入力情報をテーブルに登録し、結果画面にメッセージを表示する。
- “terasoluna-spring-thin-blank\sources”を右クリックする。
- 「新規」→「クラス」を選択する。
- 以下の通り入力し、「終了」ボタンを押下する。
- パッケージ:jp.terasoluna.thin.tutorial.web.usermanager.blogic
- 名前:InsertBLogic
- インターフェース:jp.terasoluna.fw.service.thin.BLogic
- 生成されたInsertBLogicクラスを以下のように編集する。
package jp.terasoluna.thin.tutorial.web.usermanager.blogic; import jp.terasoluna.fw.dao.QueryDAO; import jp.terasoluna.fw.dao.UpdateDAO; import jp.terasoluna.fw.service.thin.BLogic; import jp.terasoluna.fw.service.thin.BLogicResult; import jp.terasoluna.thin.tutorial.web.usermanager.dto.InsertInput; import jp.terasoluna.thin.tutorial.web.usermanager.vo.SelectUserOutput; /** * 登録処理を行うビジネスロジック。 * */ public class InsertBLogic implements BLogic<InsertInput> { /** * QueryDAO。 * Springによりインスタンス生成され設定される。 */ private QueryDAO queryDAO = null; /** * UpdateDAO。 * Springによりインスタンス生成され設定される。 */ private UpdateDAO updateDAO = null; /** * 登録処理を行う。 */ public BLogicResult execute(InsertInput param) { BLogicResult result = new BLogicResult(); SelectUserOutput selectUserOutput = queryDAO.executeForObject("getUser", param, SelectUserOutput.class); //登録するIDが重複してる場合は異常処理をする if(selectUserOutput != null) { result.setResultString("failure"); return result; } //登録処理 updateDAO.execute("insertUser", param); result.setResultString("success"); return result; } /** * QueryDAOを設定する。 * @param queryDAO */ public void setQueryDAO(QueryDAO queryDAO) { this.queryDAO = queryDAO; } /** * UpdateDAOを設定する。 * @param updateDAO */ public void setUpdateDAO(UpdateDAO updateDAO) { this.updateDAO = updateDAO; } }
ビジネスロジッククラス同様、SpringのDIコンテナによりインスタンスが生成されるため、DAOを利用する場合はDAOインタフェースの属性およびそのSetterメソッドを用意する。
QueryDAOの利用方法
入力の「ID」を持つレコードを取得するSQL文を発行する。SQL文は「2.6.3 SQLの設定」で設定した以下のSQL文である。
<!-- 指定したIDのを取得する --> <select id="getUser" parameterClass="jp.terasoluna.thin.tutorial.web.usermanager.dto.InsertInput" resultClass="jp.terasoluna.thin.tutorial.web.usermanager.vo.SelectUserOutput"> SELECT ID, NAME, AGE, BIRTH FROM USERLIST WHERE ID = #id# </select>
このSQL文で返却されるレコードは必ず1件となる。 この場合は、QueryDAOのexecuteForObjectメソッドを利用して、以下のようにSQL文を発行する。
SelectUserOutput selectUserOutput = queryDAO.executeForObject("getUser", param, SelectUserOutput.class);
以下に引数を示す。
- 第1引数:SQL設定ファイルに定義したSQLID
- 第2引数:入力バリューオブジェクト
- 第3引数:出力バリューオブジェクトクラスの型
備考
SQL文の結果が複数件ある場合の利用方法については、「2.7 一覧表示 2.7.3 SQLとビジネスロジッククラスの作成」を参照のこと。
UpdateDAOの利用方法
入力情報を挿入するSQL文を発行する。SQL文は「2.6.3 SQLの設定」で設定した以下のSQL文である。
<!-- ユーザを挿入する --> <insert id="insertUser" parameterClass="jp.terasoluna.thin.tutorial.web.usermanager.dto.InsertInput"> INSERT INTO USERLIST ( ID, NAME, AGE, BIRTH )VALUES( #id#, #name#, #age#, #birth#) </insert>
挿入、更新、削除を行うSQL文を発行する場合は、UpdateDAOのexecuteメソッドを利用して、以下のようにSQL文を発行する。
updateDAO.execute("insertUser", param);
UpdateDAOのexecuteメソッドは処理したレコードの件数を返却する。以下に引数を示す。
- 第1引数:SQL設定ファイルに定義したSQLID
- 第2引数:入力バリューオブジェクト
備考
SQLMap定義ファイルにて、以下のようにuseStatementNamespaces属性に“true”が指定されている場合は、 DAOでSQLIDを指定する際に、SQL設定ファイルの名前空間を付与する必要がある。
- SQLMap定義ファイル
<sqlMapConfig> <settings useStatementNamespaces="true" /> <sqlMap resource="sqlMap.xml" /> </sqlMapConfig>
- SQL設定ファイル
<!-- SqlMap定義 --> <!-- 名前空間の設定 --> <sqlMap namespace="user"> <!-- 指定したIDのを取得する --> <select id="getUser" parameterClass="jp.terasoluna.thin.tutorial.web.usermanager.dto.InsertInput" resultClass="jp.terasoluna.thin.tutorial.web.usermanager.vo.SelectUserOutput"> SELECT ID, NAME, AGE, BIRTH FROM USERLIST WHERE ID = #id# </select> </sqlMap>
- SQLIDの指定例
queryDAO.executeForObject("user.getUser", param, SelectUserOutput.class);
(2) アプリケーション共通のSpring設定ファイルの確認
DAOのデフォルト実装の設定は、アプリケーション共通のSpring設定ファイル(applicationContext.xml)に設定されている。
- “terasoluna-spring-thin-blank\webapps\WEB-INF\applicationContext.xml”を開き、以下の設定がされていることを確認する。
<!-- ======================================== iBATIS定義 --> <!-- SqlMap定義 --> ・・・略・・・ <!-- 照会系のDAO定義 --> <bean id="queryDAO" class="jp.terasoluna.fw.dao.ibatis.QueryDAOiBatisImpl"> <property name="sqlMapClient"><ref local="sqlMapClient"/></property> </bean> <!-- 更新系のDAO定義 --> <bean id="updateDAO" class="jp.terasoluna.fw.dao.ibatis.UpdateDAOiBatisImpl"> <property name="sqlMapClient"><ref local="sqlMapClient"/></property> </bean> <!-- ストアドプロシジャ用のDAO定義 --> <bean id="spDAO" class="jp.terasoluna.fw.dao.ibatis.StoredProcedureDAOiBatisImpl"> <property name="sqlMapClient"><ref local="sqlMapClient"/></property> </bean>
(3) Spring設定ファイルの編集
作成したビジネスロジッククラスをSpring設定ファイルに設定する。
- terasoluna-spring-thin-blank\webapps\WEB-INF\userManager\userManagerContext.xml”を開き、以下のビジネスロジックの設定を追加する。
<!-- アクション定義 --> ・・・略・・・ <!-- 登録処理ビジネスロジック定義 --> <bean id="InsertBLogic" scope="singleton" class="jp.terasoluna.thin.tutorial.web.usermanager.blogic.InsertBLogic"> <property name="queryDAO" ref="queryDAO" /> <property name="updateDAO" ref="updateDAO" /> </bean>
<property>要素に利用するDAOを指定する。name属性で指定する名前はビジネスロジッククラスの属性名と一致させる必要があり、ref属性に指定する名前は(2)で確認したDAOのBeanIDと一致させる必要がある。