0

Spring Ibatis DAO 実装クラスでのトランザクションの記述方法。

バッチ更新に次のコードを使用していますが、200 レコードを更新するのに 10 秒以上かかります。Google で検索したところ、このバッチ更新でトランザクションを実装すると、より速く動作することがわかりました。

私のバッチ更新コードは次のようなものです(クラスSensorValueLastBeanDAOImpl内)

public int processBatchUpdate(
        final List<SensorValueLastBean> sensorValueLast) {

    Integer updateCount = 0;
    try {


        updateCount = (Integer) getSqlMapClientTemplate().execute(
                new SqlMapClientCallback<Object>() {
                    public Object doInSqlMapClient(SqlMapExecutor executor)
                            throws SQLException {                                           
                        executor.startBatch();
                        Iterator<SensorValueLastBean> iter = sensorValueLast
                                .iterator();
                        while (iter.hasNext()) {
                            executor.update(
                                    "sensor_values_last.ibatorgenerated_updateByPrimaryKeySelective",
                                    iter.next());
                        }
                                                                                    executor.executeBatch();
                        return new Integer(executor.executeBatch());

                    }
                });
    } catch (Exception e) {
        e.printStackTrace();
    }

}

この関数で getSqlMapClient().startTransaction() を使用すると、以下のようなエラーが表示されます

com.ibatis.sqlmap.engine.impl.SqlMapExecutorDelegate.startTransaction(SqlMapExecutorDelegate.java:684) のjava.lang.NullPointerException com.ibatis.sqlmap.engine.impl.SqlMapSessionImpl.startTransaction(
SqlMapSessionImpl.java:164)
com. ibatis.sqlmap.engine.impl.SqlMapClientImpl.startTransaction(SqlMapClientImpl.java:140)

4

1 に答える 1

0

2番目のエラーは、ibatisのトランザクションマネージャーがないために発生しました。次のように構成できます。

<!DOCTYPE sqlMapConfig
PUBLIC "-//ibatis.apache.org//DTD SQL Map Config 2.0//EN" 
"http://ibatis.apache.org/dtd/sql-map-config-2.dtd">

<sqlMapConfig>
  <settings useStatementNamespaces="true"/>
    <transactionManager type="JDBC">
      <dataSource type="SIMPLE">
      <property name="JDBC.Driver" value="com.mysql.jdbc.Driver"/>
      <property name="JDBC.ConnectionURL"
      value="jdbc:mysql://localhost:3306/mydb"/>
      <property name="JDBC.Username" value="root"/>
      <property name="JDBC.Password" value="root"/>
    </dataSource>
 </transactionManager>
<sqlMap resource="Contact.xml"/> 

于 2013-03-07T03:45:53.837 に答える