jp.terasoluna.fw.dao.ibatis
クラス UpdateDAOiBatisImpl

java.lang.Object
  上位を拡張 org.springframework.dao.support.DaoSupport
      上位を拡張 org.springframework.orm.ibatis.support.SqlMapClientDaoSupport
          上位を拡張 jp.terasoluna.fw.dao.ibatis.UpdateDAOiBatisImpl
すべての実装されたインタフェース:
UpdateDAO, org.springframework.beans.factory.InitializingBean

public class UpdateDAOiBatisImpl
extends org.springframework.orm.ibatis.support.SqlMapClientDaoSupport
implements UpdateDAO

UpdateDAOインタフェースのiBATIS用実装クラス。

このクラスは、Bean定義ファイルにBean定義を行いサービス層に インジェクションして使用する。以下に設定例および実装例を示す。

注意点
executeBatchはiBATISのバッチ実行機能を使用している。 executeBatchの戻り値は、実行したSQLによる変更行数が返却するが、 java.sql.PreparedStatementを使用しているため、 ドライバにより正確な行数が取得できないケースがある。
変更行数が正確に取得できないドライバを使用する場合、 変更行数がトランザクションに影響を与える業務では (変更行数が0件の場合エラー処理をするケース等)、 バッチ更新は使用しないこと。
参考資料)
http://otndnld.oracle.co.jp/document/products/oracle10g/101/doc_v5/java.101/B13514-02.pdf
450ページ「標準バッチ処理のOracle 実装の更新件数」を参照のこと。

Bean定義ファイルの例

<bean id="registBLogic" class="jp.strutspring.blogic.RegistBLogic">
  <property name="dao"><ref local="updateDAO"/> </property>
</bean>

<bean id="updateDAO"
     class="jp.terasoluna. fw.dao.ibatis.UpdateDAOiBATISImpl">
  <property name="sqlMapClient"> <ref local="sqlMapClient"/></property>
</bean>

<bean id="sqlMapClient"
      class="org.springframework.orm.ibatis.SqlMapClientFactoryBean">
  <property name="configLocation">
    <value>sqlMapConfig.xml</value>
  </property>
</bean>

サービス層での使用方法:データ一件の更新処理

public class RegistBLogic {
    private UpdateDAO dao = null;
    public UpdateDAO getDao() {
        return dao;
    }
    public void setDao(UpdateDAO dao) {
        this.dao = dao;
    }

    public String execute() {

        UserBean bean = new UserBean();
        bean.setId("1");
        bean.setName("N.OUNO");
        bean.setAge("20");

        dao.execute("insertUser", bean);

        ...
        return "success";
    }
}

サービス層での使用方法:オンラインバッチ処理

public String execute() {

    List<SqlHolder> sqlHolders = new ArrayList<SqlHolder>();

    UserBean bean = new UserBean();
    bean.setId("1");
    bean.setName("N.OUNO");
    bean.setAge("20");
    SqlHolder holder = new SqlHolder("insertUser", bean);
    sqlHolders.add(holder);

    UserBean bean2 = new UserBean();
    bean.setId("2");
    bean.setName("K.FUJIMOTO");
    bean.setAge("21");
    SqlHolder holder2 = new SqlHolder("insertUser", bean2);
    sqlHolders.add(holder2);

    dao.executeBatch(sqlHolders);

    ...
    return "success";
}


フィールドの概要
protected  java.lang.ThreadLocal<java.util.List<SqlHolder>> batchSqls
          推奨されていません。 この変数は将来削除されます
(package private) static org.apache.commons.logging.Log log
          ログインスタンス
 
クラス org.springframework.dao.support.DaoSupport から継承されたフィールド
logger
 
コンストラクタの概要
UpdateDAOiBatisImpl()
           
 
メソッドの概要
 void addBatch(java.lang.String sqlID, java.lang.Object bindParams)
          推奨されていません。 addBatchの代わりにexecuteBatch(List) を使用すること
 int execute(java.lang.String sqlID, java.lang.Object bindParams)
          引数sqlIDで指定されたSQLを実行して、結果件数を返却する。
 int executeBatch()
          推奨されていません。 addBatchの代わりにexecuteBatch(List) を使用すること
 int executeBatch(java.util.List<SqlHolder> sqlHolders)
          バッチ処理の実行メソッド。
 
クラス org.springframework.orm.ibatis.support.SqlMapClientDaoSupport から継承されたメソッド
checkDaoConfig, getDataSource, getSqlMapClient, getSqlMapClientTemplate, setDataSource, setSqlMapClient, setSqlMapClientTemplate
 
クラス org.springframework.dao.support.DaoSupport から継承されたメソッド
afterPropertiesSet, initDao
 
クラス java.lang.Object から継承されたメソッド
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

フィールドの詳細

log

static org.apache.commons.logging.Log log
ログインスタンス


batchSqls

@Deprecated
protected final java.lang.ThreadLocal<java.util.List<SqlHolder>> batchSqls
推奨されていません。 この変数は将来削除されます
バッチ実行用のSQL

コンストラクタの詳細

UpdateDAOiBatisImpl

public UpdateDAOiBatisImpl()
メソッドの詳細

execute

public int execute(java.lang.String sqlID,
                   java.lang.Object bindParams)
引数sqlIDで指定されたSQLを実行して、結果件数を返却する。 実行するSQLは「insert, update delete」の3種類とする。

定義:
インタフェース UpdateDAO 内の execute
パラメータ:
sqlID - 実行するSQLのID
bindParams - SQLにバインドする値を格納したオブジェクト
戻り値:
SQLの実行結果件数を返却

addBatch

@Deprecated
public void addBatch(java.lang.String sqlID,
                                java.lang.Object bindParams)
推奨されていません。 addBatchの代わりにexecuteBatch(List) を使用すること

バッチ追加メソッド。 引数のSQLをスレッドローカルに保持する。 複数のリクエストをまたいでSQLを保持することはできない。 追加後に、UpdateDAO#executeBatch()で、一括実行を行う。 注意:このメソッドを使用すると、バッチ更新対象のSQLが クリアされない可能性がある。executeBatch(List)を使用すること。

定義:
インタフェース UpdateDAO 内の addBatch
パラメータ:
sqlID - 実行するSQLのID
bindParams - SQLにバインドする値を格納したオブジェクト

executeBatch

@Deprecated
public int executeBatch()
推奨されていません。 addBatchの代わりにexecuteBatch(List) を使用すること

バッチ処理の実行メソッド。 addBatch(String, Object)で追加されたSQLを 一括実行する。バッチ実行後はSQLをクリアする。 addBatch(String, Object)でSQLを追加していない場合、 実行時例外が発生する。 注意:このメソッドを使用すると、バッチ更新対象のSQLが クリアされない可能性がある。executeBatch(List)を使用すること。

定義:
インタフェース UpdateDAO 内の executeBatch
戻り値:
SQLの実行結果

executeBatch

public int executeBatch(java.util.List<SqlHolder> sqlHolders)
バッチ処理の実行メソッド。
引数のSqlHolderのリストで指定されたすべてのSQLを実行する。

注意点
executeBatchはiBATISのバッチ実行機能を使用している。 executeBatchの戻り値は、実行したSQLによる変更行数が返却するが、 java.sql.PreparedStatementを使用しているため、 ドライバにより正確な行数が取得できないケースがある。
変更行数が正確に取得できないドライバを使用する場合、 変更行数がトランザクションに影響を与える業務では (変更行数が0件の場合エラー処理をするケース等)、 バッチ更新は使用しないこと。
参考資料)
http://otndnld.oracle.co.jp/document/products/oracle10g/101/doc_v5/java.101/B13514-02.pdf
450ページ「標準バッチ処理のOracle 実装の更新件数」を参照のこと。

定義:
インタフェース UpdateDAO 内の executeBatch
パラメータ:
sqlHolders - バッチ更新対象のsqlId、パラメータを格納した SqlHolderインスタンスのリスト
戻り値:
SQLの実行結果件数