利用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层中直接调用批量方法...
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层中直接调用批量方法...
相关文章推荐
- 按照文本格式生成sql语句--查找并替换语句
- Mybatis中如何获取SqlSession
- ios初学SQLite3(创建、插入、查询、更新数据库和表)
- SQL学习笔记9——分页查询
- python连接mongodb并进行用户验证
- MySQL sql-mode
- Mysql存储引擎
- mysql 用命令行导出数据库文件
- ORACLE动态游标及动态SQL使用实例
- Sql Server之旅——第六站 使用winHex利器加深理解数据页
- MySQL死锁分析及解决的方法--例子
- oracle 平时记录
- Sql Server之旅——第五站 确实不得不说的DBCC命令
- 将数据库文件导入mysql并输出为txt文件
- mysql批量导入sql
- mysql 2003 (113)
- Sql Server之旅——第四站 你必须知道的非聚集索引扫描
- Sql Server之旅——第三站 解惑那些背了多年聚集索引的人
- sql分页存储过程
- Yii2-Redis使用小记 - Cache(转)