`
liuxi1024
  • 浏览: 384350 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

spring JdbcTemplate 批量插入

 
阅读更多

1、通过批量操作减少与数据库连接所消耗的资源。

 

2、JdbcTemplate的批量操作特性需要实现特定的接口BatchPreparedStatementSetter来进行的, 通过实现这个接口,并将其传入batchUpdate方法进行调用。 这个接口有两个方法需要实现。一个叫做getBatchSize来提供当前需要批量操作的数量。另外一个方法是setValues 允许你为prepared statement设置参数。这个方法将在整个过程中被调用的次数,则取决于你在getBatchSize中所指定的大小。

 

3、例子代码如下:

 

public void storeSalesOrder(List<Report> list) {
		System.out.format("执行保存数据 %s ...%n", ip);
		final List<Report> reportList = list;
		String sql = "insert into sell_order(traceNo, purchaseBatch, terminalNo, sellDate, "
				+ "category, weight, price, amount, createDate, status) values(?,?,?,?,?,?,?,?,?,?)";
		template.batchUpdate(sql, new BatchPreparedStatementSetter() {
			public void setValues(PreparedStatement ps, int i)throws SQLException {
				String[] text1 = StringUtils.stringToArrayCustom(reportList.get(i).text1,"##");
				Calendar cal = Calendar.getInstance(); 
				cal.set(reportList.get(i).year, reportList.get(i).month - 1, reportList.get(i).day,
						reportList.get(i).hour, reportList.get(i).minute,reportList.get(i).second);
				String text4 = reportList.get(i).text4.replace("#", "");
				
				String traceNo = reportList.get(i).text2;
				String purchaseBatch = (text1 != null && text1.length != 0)?text1[0].trim():"";
				String terminalNo = (text1 != null && text1.length != 0)?text1[1].trim():"";
				Date sellDate = cal.getTime();
				String category = text4;
				double weight = 0d;
				double price = 0d;
				if(kgFlag){
					weight = reportList.get(i).count.doubleValue();
					price = reportList.get(i).unitPrice.doubleValue();
				}else{
					weight = reportList.get(i).count.doubleValue()/2;
					price = reportList.get(i).unitPrice.doubleValue()*2;
				}
				double amount = reportList.get(i).price.doubleValue();
				
				ps.setString(1, traceNo);
				ps.setString(2, purchaseBatch);
				ps.setString(3, terminalNo);
				ps.setTimestamp(4, new Timestamp(sellDate.getTime()));
				ps.setString(5, category);
				ps.setDouble(6, weight);
				ps.setDouble(7, price);
				ps.setDouble(8, amount);
				ps.setTimestamp(9, new Timestamp(new Date().getTime()));
				ps.setInt(10, 0);
			}

			public int getBatchSize() {
				return reportList.size();
			}
		});

	}

 

 

分享到:
评论

相关推荐

    Spring JdbcDaoSupport 批量插入数据

    NULL 博文链接:https://huibin.iteye.com/blog/618316

    Spring的JdbcTemplate插入操作返回主键ID的方法 - - ITeye技术网站.htm

    Spring的JdbcTemplate插入操作返回主键ID的方法 - - ITeye技术网站

    SpringJDBC批量处理数据代码示例

    参数: List&lt;Map&gt; paramMaps = new ArrayList(); for(int i = 0; i &lt; 100; i++ ){ Map paramMap = new HashMap(); paramMap.put(param1, param1);... paramMap.put(param2, param2);... paramMap.put(param5, param5

    Spring中文帮助文档

    11.4.1. 使用JdbcTemplate进行批量操作 11.4.2. 使用SimpleJdbcTemplate进行批量操作 11.5. 通过使用SimpleJdbc类简化JDBC操作 11.5.1. 使用SimpleJdbcInsert插入数据 11.5.2. 使用SimpleJdbcInsert来获取自动...

    springboot集成phoenix+hbase

    springboot集成phoenix+hbase 完整demo!!!!!!!

    Spring.3.x企业应用开发实战(完整版).part2

    11.3.3 插入Lob类型的数据 11.3.4 以块数据方式读取Lob数据 11.3.5 以流数据方式读取Lob数据 11.4 自增键和行集 11.4.1 自增键的使用 11.4.2 如何规划主键方案 11.4.3 以行集返回数据 11.5 其他类型的JDBCTemplate ...

    Spring API

    11.4.1. 使用JdbcTemplate进行批量操作 11.4.2. 使用SimpleJdbcTemplate进行批量操作 11.5. 通过使用SimpleJdbc类简化JDBC操作 11.5.1. 使用SimpleJdbcInsert插入数据 11.5.2. 使用SimpleJdbcInsert来获取自动...

    Spring3.x企业应用开发实战(完整版) part1

    11.3.3 插入Lob类型的数据 11.3.4 以块数据方式读取Lob数据 11.3.5 以流数据方式读取Lob数据 11.4 自增键和行集 11.4.1 自增键的使用 11.4.2 如何规划主键方案 11.4.3 以行集返回数据 11.5 其他类型的JDBCTemplate ...

    java的轻量级orm工具包jdao.zip

    在jdao底层,目前有spring的jdbcTemplate实现与我自己封装的jdaoHandlerImpl实现。jdao有支持事务,支持批量插入数据等特性。同时jdao底层数据库操作提供接口,编程人员可以自己实现。 如果你觉得hibernate,ibatis...

    JdbcTemplateTool.zip

    Spring 出品的 JdbcTemplate 对于不想使用hibernate或者ibatis那样需要大量学习成本而且还想获得对象化的人来说是很好用的。但是 JdbcTemplate还是有很多不足之处或者说是缺点。比如你没法像hibernate那样直接传一个...

Global site tag (gtag.js) - Google Analytics