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

刚开始接触springmvc+ibatis架构时遇到批量插入更新数据库的问题。



[java]  view plain  copy
  1. public class BaseDao extends SqlMapClientDaoSupport {  
  2.     @Resource(name = "sqlMapClient")  
  3.     private SqlMapClient sqlMapClient;  
  4.   
  5.     @PostConstruct  
  6.     public void initSqlMapClient() {  
  7.         super.setSqlMapClient(sqlMapClient);  
  8.     }  
  9.   
  10. }  

BaseDao一般的写法如上,在继承basedao后,我们使用this.getSqlMapClientTemplate()方法调用现成的数据库操作方法(增删改查),但是这里面却没有批量操作方法

我们需要利用execute和SqlMapClientCallback

[java]  view plain  copy
  1. protected void batchInsert(final List<T> objList, final String statment, final int i) throws DataAccessException {  
  2.         this.getSqlMapClientTemplate().execute(new SqlMapClientCallback() {  
  3.             public T doInSqlMapClient(SqlMapExecutor executor) throws SQLException {  
  4.                 executor.startBatch();  
  5.                 int batch = 0;  
  6.                 for (T obj : objList) {  
  7.                     executor.insert(statment, obj);  
  8.                     batch++;  
  9.                     if (batch == i) {  
  10.                         executor.executeBatch();  
  11.                         batch = 0;  
  12.                     }  
  13.                 }  
  14.                 executor.executeBatch();  
  15.                 return null;  
  16.             }  
  17.         });  
  18.     }  
  19.   
  20.     /** 
  21.      * 批量更新 
  22.      *  
  23.      * @param objList 
  24.      *            更新对象类表 
  25.      * @param statment 
  26.      *            sqlID名称 
  27.      * @param i 
  28.      *            更新数量 
  29.      * @throws DataAccessException 
  30.      */  
  31.     @SuppressWarnings("unchecked")  
  32.     protected void batchUpdate(final List<T> objList, final String statment, final int i) throws DataAccessException {  
  33.         this.getSqlMapClientTemplate().execute(new SqlMapClientCallback() {  
  34.             public T doInSqlMapClient(SqlMapExecutor executor) throws SQLException {  
  35.                 executor.startBatch();  
  36.                 int batch = 0;  
  37.                 for (T obj : objList) {  
  38.                     executor.update(statment, obj);  
  39.                     batch++;  
  40.                     if (batch == i) {  
  41.                         executor.executeBatch();  
  42.                         batch = 0;  
  43.                     }  
  44.                 }  
  45.                 executor.executeBatch();  
  46.                 return null;  
  47.             }  
  48.         });  
  49.     }  
同时要修改basedao

[java]  view plain  copy
  1. public class BaseDao<T extends Entity> extends SqlMapClientDaoSupport  

这样就能在自己的dao层中直接调用批量方法...
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值