JdbcTemplate 批量处理数据

核心方法:

batchUpdate(String sql,BatchPreparedStatementSetter pss)


 spring JdbcTemplate 批量插入或更新操作

用 JdbcTemplate 进行批量插入或更新操作

方法一:

代码只是测试用的一个小例子。

public int insertContractAch(List list) throws DataAccessException {   
    final List temList = list;   
    String sql = "insert into contract_ach_t " +   
            " values(?,to_date(?,'yyyy-mm-dd'),?,?) ";   
    try{   
        int[] ii = this.getJdbcTemplate().batchUpdate(sql, new MyBatchPreparedStatementSetter(temList));   
        return ii.length;   
    }catch (org.springframework.dao.DataAccessException e) {   
        e.printStackTrace();   
        throw new DataAccessException(e.getMessage());   
    }   
}   
/** 
* 处理批量插入的回调类 
* */   
private class MyBatchPreparedStatementSetter implements BatchPreparedStatementSetter{   
    final List temList;   
    /**通过构造函数把要插入的数据传递进来处理*/   
    public MyBatchPreparedStatementSetter(List list){   
        temList = list;   
    }   
    public int getBatchSize() {   
        return temList.size();   
    }   
   
    public void setValues(PreparedStatement ps, int i)   
            throws SQLException {   
        ContractAchVO contractAchVO = (ContractAchVO)temList.get(i);   
        ps.setString(1, contractAchVO.getContractCode());   
        ps.setString(2, contractAchVO.getCreateDate());   
        ps.setString(3, contractAchVO.getEmployeeId());   
        ps.setString(4, contractAchVO.getPercent());   
    }   

方法二:

//插入很多书(批量插入用法) 
public void insertBooks(List<Book> book) 

  final List<Book> tempBook=book; 
  String sql="insert into book(name,pbYear) values(?,?)"; 
  jdbcTemplate.batchUpdate(sql, new BatchPreparedStatementSetter() 
  { 
   public void setValues(PreparedStatement ps,int i)throws SQLException 
   { 
    String name=tempBook.get(i).getName(); 
    int pbYear=tempBook.get(i).getPbYear(); 
    ps.setString(1, name); 
    ps.setInt(2, pbYear); 
   } 
   public int getBatchSize() 
   { 
    return tempBook.size(); 
   } 
  }); 
    



自己的例子:

  1. /** 
  2.      * 待办事项插入sql 
  3.      */  
  4.     private static final String sqlInsert = "insert into t_todo_item(app,type,key,occurtime,title,data,userid,loginname,status) values(?,?,?,?,?,?,?,?,?)";  
  5.       
  6.     /** 
  7.      * 业务表扫描状态修改 
  8.      */  
  9.     private static final String sqlUpdate = "update tasks t set t.scaned = 1 where t.taskid = ?";  
  10.       
  11.       
  12.     private JdbcTemplate jt;  
  13.       
  14.     static Logger log = SimpleLogger.getLogger(DeptContactTodoInstance.class);  
  15.       
  16.       
  17.     @Override  
  18.     public void action(JdbcTemplate jt) {  
  19.         this.jt = jt;  
  20.           
  21.         final List<Map<String,String>> list = fetchData();  
  22.           
  23.         if(list.size()==0){  
  24.             log.debug("no data!");  
  25.             return;  
  26.         }  
  27.           
  28.         BatchPreparedStatementSetter pssInsert = new BatchPreparedStatementSetter() {  
  29.             @Override  
  30.             public int getBatchSize() {  
  31.                 return list.size();  
  32.             }  
  33.   
  34.             @Override  
  35.             public void setValues(PreparedStatement ps, int i) throws SQLException {  
  36.                 Map<String,String> map = list.get(i);  
  37.                   
  38.                 String taskid = StringUtil.getNotNullValueString(map.get("taskid"));  
  39.                 String theme = StringUtil.getNotNullValueString(map.get("theme"));  
  40.                 String loginname = StringUtil.getNotNullValueString(map.get("assignedtouser"));  
  41.                 String occurTime = StringUtil.getNotNullValueString(map.get("start_time"));  
  42.                   
  43.                 map.put("content", StringUtil.subStr(map.get("content"), 100));  
  44.                   
  45.                 ps.setString(1, appName);  
  46.                 ps.setInt(2, TodoConstants.TYPE_DEPTCONTACT);  
  47.                 ps.setString(3, taskid);  
  48.                 ps.setString(4, occurTime);  
  49.                 ps.setString(5, theme);  
  50.                 ps.setString(6, gson.toJson(map));  
  51.                   
  52.                 /* 
  53.                  * TODO 查询用户ID 
  54.                  */  
  55.                 ps.setString(7"");  
  56.                 ps.setString(8, loginname);  
  57.                   
  58.                 ps.setInt(9, TodoConstants.STATUS_TODO);  
  59.             }  
  60.         };  
  61.           
  62.         jt.batchUpdate(sqlInsert, pssInsert);  
  63.           
  64.         BatchPreparedStatementSetter pssUpdate = new BatchPreparedStatementSetter() {  
  65.             @Override  
  66.             public int getBatchSize() {  
  67.                 return list.size();  
  68.             }  
  69.   
  70.             @Override  
  71.             public void setValues(PreparedStatement ps, int i) throws SQLException {  
  72.                 Map<String,String> map = list.get(i);  
  73.                 String taskid = StringUtil.getNotNullValueString(map.get("taskid"));  
  74.                 ps.setString(1, taskid);  
  75.             }  
  76.         };  
  77.           
  78.         jt.batchUpdate(sqlUpdate, pssUpdate);  
  79.           
  80. log.debug(list.size()+" records insert/update!");  
  81.     }  
/**
	 * 待办事项插入sql
	 */
	private static final String sqlInsert = "insert into t_todo_item(app,type,key,occurtime,title,data,userid,loginname,status) values(?,?,?,?,?,?,?,?,?)";
	
	/**
	 * 业务表扫描状态修改
	 */
	private static final String sqlUpdate = "update tasks t set t.scaned = 1 where t.taskid = ?";
	
	
	private JdbcTemplate jt;
	
	static Logger log = SimpleLogger.getLogger(DeptContactTodoInstance.class);
	
	
	@Override
	public void action(JdbcTemplate jt) {
		this.jt = jt;
		
		final List<Map<String,String>> list = fetchData();
		
		if(list.size()==0){
			log.debug("no data!");
			return;
		}
		
		BatchPreparedStatementSetter pssInsert = new BatchPreparedStatementSetter() {
			@Override
			public int getBatchSize() {
				return list.size();
			}

			@Override
			public void setValues(PreparedStatement ps, int i) throws SQLException {
				Map<String,String> map = list.get(i);
				
				String taskid = StringUtil.getNotNullValueString(map.get("taskid"));
				String theme = StringUtil.getNotNullValueString(map.get("theme"));
				String loginname = StringUtil.getNotNullValueString(map.get("assignedtouser"));
				String occurTime = StringUtil.getNotNullValueString(map.get("start_time"));
				
				map.put("content", StringUtil.subStr(map.get("content"), 100));
				
				ps.setString(1, appName);
				ps.setInt(2, TodoConstants.TYPE_DEPTCONTACT);
				ps.setString(3, taskid);
				ps.setString(4, occurTime);
				ps.setString(5, theme);
				ps.setString(6, gson.toJson(map));
				
				/*
				 * TODO 查询用户ID
				 */
				ps.setString(7, "");
				ps.setString(8, loginname);
				
				ps.setInt(9, TodoConstants.STATUS_TODO);
			}
		};
		
		jt.batchUpdate(sqlInsert, pssInsert);
		
		BatchPreparedStatementSetter pssUpdate = new BatchPreparedStatementSetter() {
			@Override
			public int getBatchSize() {
				return list.size();
			}

			@Override
			public void setValues(PreparedStatement ps, int i) throws SQLException {
				Map<String,String> map = list.get(i);
				String taskid = StringUtil.getNotNullValueString(map.get("taskid"));
				ps.setString(1, taskid);
			}
		};
		
		jt.batchUpdate(sqlUpdate, pssUpdate);
		
log.debug(list.size()+" records insert/update!");
	}




  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值