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)