您的位置:首页 > 数据库

利用Ibatis执行批量插入更新数据库操作

2016-06-24 15:31 681 查看
刚开始接触springmvc+ibatis架构时遇到批量插入更新数据库的问题。

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

这样就能在自己的dao层中直接调用批量方法...
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: