Spring的批量处理
来源:互联网 发布:微信企业号java 编辑:程序博客网 时间:2024/05/21 06:24
由于数据的批量处理(比如往RDBMS插入几万条数据)非常耗资源,因此建议在所有场合能够借助于JDBC完成,而不要去采用Hibernate API。本文主要围绕Spring内置的各类JDBC API抽象支持展开的。
1.1. JdbcTemplate内置的batchUpdate(final String[] sql)
这一方法适合于小批量数据的CUD(增、更新、删除)操作,而且SQL类型不限。由于其内部使用了Statement语句,所以数据的操作效率一般。
1.2. JdbcTemplate内置的batchUpdate(String sql, final BatchPreparedStatementSetter pss)这一方法也仅仅适合于小批量数据的CUD(增、更新、删除)操作,但始终是同一SQL(参数具有多样性)。由于其内部使用了PreparedStatement语句,所以数据的操作效率还是不错的。下面给出了操作示例:
final int[] no = new int[]{7369,7499,7521,7566,7654,7698};
jt.batchUpdate("update emp set sal = ? where empno = ?", //注:在oracle数据背景下,该方法的返回值失效(always -2)
new BatchPreparedStatementSetter(){
public void setValues(PreparedStatement ps, int i)throws SQLException {
ps.setInt(1, no[i]);
ps.setFloat(2, no[i]);
}
public int getBatchSize() {
return no.length;
}
});
1.3. BatchSqlUpdate
这一方法适合于各种批量数据的CUD(增、更新、删除)操作,但始终是同一SQL(参数具有多样性)。由于其内部使用了PreparedStatement语句,所以数据的操作效率还是不错的。下面给出了操作示例:
DataSource ds = gbfa.getBean("dataSource");
final int[] no = new int[]{7369,7499,7521,7566,7654,7698};
BatchSqlUpdate bsu = new BatchSqlUpdate(ds, "update emp set sal=? where empno = ?");
bsu.setBatchSize(4);
bsu.setTypes(new int[]{Types.FLOAT, Types.INTEGER});
for(int i = 0; i < no.length; ++i){
log.info(bsu.update(new Object[]{no[i],no[i]})) ; ////注:在oracle数据背景下,该方法的返回值失效(always -1)
}
bsu.flush();
同JdbcTemplate内置的batchUpdate(String sql, final BatchPreparedStatementSetter pss)相比,BatchSqlUpdate会自动分批待批量处理的数据。比如,如果需要批量操作10万条数据,则可以控制其batchSize,从而在时间(RDBMS可知性)和空间(内存)上达到平衡。
务必注意,在使用BatchSqlUpdate的最后,不要忘记手工调用其暴露的flush()方法。
- Spring的批量处理
- Spring的批量处理
- Spring的批量处理
- spring框架对批量参数的处理
- spring DAO批量处理
- spring+mybatis 批量处理
- spring ibatis 批量处理数据
- Spring 批量处理文件 ResourcePatternResolver
- Spring+Mybatis批量处理数据
- Hibernate 的批量处理
- Hibernate的批量处理
- JDBC的批量处理
- JDBC的批量处理
- JDBC的批量处理
- JDBC的批量处理
- JDBC的批量处理
- ibatis的批量处理
- JDBC的批量处理
- 废除CN域名
- 开源项目live555学习心得(二)
- SQL SERVER 2000中访问Oracle数据库服务器的几种方法
- 《阿凡达》背后:NVIDIA Tesla、新光线追踪引擎
- 【转】 Oracle的在线重定义表功能
- Spring的批量处理
- 多数据中心的高可用结构【环状星型数据库架构】
- 关于注册信息的校验代码已经解决了
- build.xml详解
- get/set方法的使用
- 地方的身份
- SQL日志文件太大,清理方法
- 用openCV 写灰度视频
- 基于AO的线程间通信