I just got done switching the Ibatis DAO to Spring DAO per the instructions
written by Larry. Everything is working fine except whenever I use
SqlMapClient executeBatch(). It always returns 0 even though all the
records were inserted. I have a method in my DAO that inserts a List of
records within a batch. executeBatch() use to return the number of records
inserted when I was useing the Ibatis DAO, now it returns 0 when using the
Spring DAO.
Also, am I even doing this correctly, is there a better way? I see a comment
in the Spring SqlMapClientTemplate that talks about an anonymous inner
class:
* for more complex
* operations like batch updates, a custom SqlMapClientCallback must be
implemented,
* usually as anonymous inner class. For example:
*
* getSqlMapClientTemplate().execute(new SqlMapClientCallback() {
* public Object doInSqlMapClient(SqlMapExecutor executor) throws
SQLException {
* executor.startBatch();
* executor.update("insertSomething", "myParamValue");
* executor.update("insertSomethingElse", "myOtherParamValue");
* executor.executeBatch();
* return null;
* }
* });
I am not quite sure how to implement this in my DAO code. Anyway, here is my
current code:
IBATIS DAO that extends com.ibatis.dao.client.template.SqlMapDaoTemplate
...
SqlMapExecutor sqlMap = getSqlMapExecutor();
...
sqlMap.startBatch();
ListIterator listIterator = parameterList.listIterator();
while(listIterator.hasNext())
{
insert(statementName, listIterator.next());
}
numberOfRecords = sqlMap.executeBatch();
...
SPRING DAO that extends org.springframework.orm.ibatis.SqlMapClientTemplate
...
SqlMapClient sqlMap = getSqlMapClient();
...
sqlMap.startBatch();
ListIterator listIterator = parameterList.listIterator();
while(listIterator.hasNext())
{
insert(statementName, listIterator.next());
}
numberOfRecords = sqlMap.executeBatch();
...
Thanks,
Warren