在无垠的数据里,出错是在所难免的,所以更新操作是每一个程序员必须熟练掌握的基础技能之一,ibatis中就有这么一套能批量更新SQL的功能,话不多说,下面来看看它们该如何实现吧。
public class BaseDao extends SqlMapClientDaoSupport { @Resource(name = "sqlMapClient") private SqlMapClient sqlMapClient; @PostConstruct public void initSqlMapClient() { super.setSqlMapClient(sqlMapClient); } }
如上,BaseDao的写法一般如此,继承basedao后,我们会使用this.getSqlMapClientTemplate()方法来调用生成好的的数据库方法,但里面是没有批量操作方法的,所以我们需要利用execute和SqlMapClientCallback来操作。
protected void batchInsert(final List < T > objList, final String statment, final int i) throws DataAccessException { this.getSqlMapClientTemplate() .execute(new SqlMapClientCallback() { public T doInSqlMapClient(SqlMapExecutor executor) throws SQLException { executor.startBatch(); int batch = 0; for (T obj: objList) { executor.insert(statment, obj); batch++; if (batch == i) { executor.executeBatch(); batch = 0; } } executor.executeBatch(); return null; } }); } /** * 批量更新 * * @param objList * 更新对象类表 * @param statment * sqlID名称 * @param i * 更新数量 * @throws DataAccessException */ @SuppressWarnings("unchecked") protected void batchUpdate(final List < T > objList, final String statment, final int i) throws DataAccessException { this.getSqlMapClientTemplate() .execute(new SqlMapClientCallback() { public T doInSqlMapClient(SqlMapExecutor executor) throws SQLException { executor.startBatch(); int batch = 0; for (T obj: objList) { executor.update(statment, obj); batch++; if (batch == i) { executor.executeBatch(); batch = 0; } } executor.executeBatch(); return null; } }); }
同时记得修改basedao
public class BaseDao < T extends Entity > extends SqlMapClientDaoSupport
这样我们就能成功批量更新了。
以上就是关于如何批量更新SQL的所有内容,在java领域我们是专业的,如果还有什么java项目中常见问题,欢迎来我们网站了解详情噢。
推荐阅读: