spring批量更新数据 ---- BatchPreparedStatementSetter

(2007-04-15 15:41:29)

转载

标签:

spring

batchpreparedstatementsetter

分类: spring
spring给我们提供了jdbc的统一封装,和其它的orm不同,它是对jdbc api的封装,相当于我们自己写的java bean,而没有对对象模型进行封装(比如将po封装为pojo)。它保持了jdbc数据对象的原始性,具有极大程度的灵活性,其性能也极高。
我们知道在进行增量操作的时候最好是使用PreparedStatement,这样会节省数据库服务器编译sql语句的成本。而Spring也提供了对增量操作的支持,而BatchPreparedStatementSetter接口则是其核心。
先看看BatchPreparedStatementSetter接口里都定义了些操作。
public interface BatchPreparedStatementSetter{
    public int getBatchSize();
public void setValues(PreparedStatement ps,int i);
}
该接口是被JdbcTemplate类使用的CallBack接口。批操作中的每个操作都使用相同的sql语句,而该接口则sql语句中的占位符设置具体的值。
  public int getBatchSize();用来返回批次的大小
public void setValues(PreparedStatement ps,int i);
  用来为PreparedStatement设值。
参数说明:
ps:我们将要设值的PreparedStatement
i:在这个批次中,正在执行操作的索引,从0算起。
以批量更新为例,我们要做的是先实现BatchPreparedStatementSetter接口,然后再调用JdbcTemplate的batchUpdate(sql,setter)操作,参数sql是预编译语句 ,setter是BatchPreparedStatementSetter的一个实例。下面是我写的一段代码:

public void batchInsertRows(String sql,final List<Object[]> dataSet) throws Exception{

BatchPreparedStatementSetter setter=new BatchPreparedStatementSetter(){
      
      public int getBatchSize(){
       return dataSet.size();
      }
      public void setValues(PreparedStatement ps,int i){
       
       Object[] obj = dataSet.get(i);
       int nextId = getNextId();
       try{
       ps.setLong(1,nextId);
       ps.setLong(2,Integer.parseInt(obj[0].toString()));
       ps.setLong(3,Integer.parseInt(obj[1].toString()));
       ps.setString(4,(String)obj[2]);}
       catch(Exception e){
        e.printStackTrace();
       }
      }

};
   jdbcTemplate.batchUpdate(sql,setter);
    }

转载于:https://www.cnblogs.com/xing-cctv/p/6327365.html

BatchPreparedStatementSetter,用法相关推荐

  1. Spring中jdbcTemplate的用法实例

    一.首先配置JdbcTemplate: 要使用Jdbctemplate 对象来完成jdbc 操作.通常情况下,有三种种方式得到JdbcTemplate 对象.        第一种方式:我们可以在自己 ...

  2. c语言中external,static关键字用法

    static用法: 在C中,static主要定义全局静态变量.定义局部静态变量.定义静态函数. 1.定义全局静态变量:在全局变量前面加上关键字static,该全局变量变成了全局静态变量.全局静态变量有 ...

  3. Pandas_transform的用法

    先来看一个实例问题. 如下销售数据中展现了三笔订单,每笔订单买了多种商品,求每种商品销售额占该笔订单总金额的比例.例如第一条数据的最终结果为:235.83 / (235.83+232.32+107.9 ...

  4. Python中yield和yield from的用法

    yield 后面接的是 future 对象 调用方 委托生成器 yield from 直接给出循环后的结果 yield from 委托者和子生成器直接通信 yield from 直接处理stopIte ...

  5. pytorch学习 中 torch.squeeze() 和torch.unsqueeze()的用法

    squeeze的用法主要就是对数据的维度进行压缩或者解压. 先看torch.squeeze() 这个函数主要对数据的维度进行压缩,去掉维数为1的的维度,比如是一行或者一列这种,一个一行三列(1,3)的 ...

  6. python yield 和 yield from用法总结

    #例1. 简单输出斐波那契數列前 N 个数 #缺点:该函数可复用性较差,因为 fab 函数返回 None,其他函数无法获得该函数生成的数列 #要提高 fab 函数的可复用性,最好不要直接打印出数列,而 ...

  7. tf.nn.embedding_lookup()的用法

    函数: tf.nn.embedding_lookup( params, ids, partition_strategy='mod', name=None, validate_indices=True, ...

  8. OpenMP用法大全

    OpenMP基本概念 OpenMP是一种用于共享内存并行系统的多线程程序设计方案,支持的编程语言包括C.C++和Fortran.OpenMP提供了对并行算法的高层抽象描述,特别适合在多核CPU机器上的 ...

  9. Dorado用法与示例

    Dorado用法与示例 dorado用后总结 一.dorado概念 dorado的产品全名是"dorado展现中间件".从产品形态上dorado由两部分组成,第一部分是一个具有AJ ...

  10. TensorFlow用法

    TensorFlow用法 什么是TensorFlow TensorFlow是一个开源软件库,用于使用数据流图进行数值计算.图中的节点表示数学运算,而图的边缘表示流动的多维数据数组(张量).这种灵活的体 ...

最新文章

  1. Mysql与Oracle区别
  2. 【Paper】2018_Group Consensus for Discrete-Time Heterogeneous Multiagent Systems with Input and Commun
  3. asp.net的MessageBox
  4. JavaBean为什么要实现Serializable接口
  5. LaTeX对公式字体加粗
  6. python中读取文件编码_[转载]python中使用文件的读取编码问题
  7. 分布式锁的几种实现方式(转)
  8. 【kafka】Replication factor: 1 larger than available brokers:0
  9. 小明利用计算机软件绘制函数,2019年人大附中初二下期末模拟数学试题
  10. Filter过滤器输出HelloFilter
  11. hp alm功能介绍_Win10继任者Win10X终于完成!微软介绍六大新功能!
  12. Envi辐射定标及大气校正
  13. 2021-07-10蓝桥杯单片机学习知识点总结
  14. 用 Amazon Web Services 进行云计算,第 3 部分: 用 EC2 根据需要提供服务器
  15. 浏览器控制台操作——随身笔记
  16. 输入身份证号判断性别并求年龄
  17. 度小满联合北大光华聚焦超级关联网络,硬技术能否改变行业风向?
  18. R markdown的笔记02
  19. 好的用户界面-界面设计的一些技巧
  20. elementary os安装后配置

热门文章

  1. PHP7.1 狐教程【旧】不在更新,请点击新连接查看
  2. PHPSTORM 6.0.3 Xdebug 配置9
  3. java layer调用native层的android_media_AudioTrack_get_min_buff_size()确定audio track buffer的min size...
  4. 阶段3 1.Mybatis_06.使用Mybatis完成DAO层的开发_1 Mybatis中编写dao实现类的使用方式-查询列表...
  5. 阶段1 语言基础+高级_1-3-Java语言高级_06-File类与IO流_04 IO字节流_2_一切皆为字节...
  6. 使用docker+tomcat部署jenkins
  7. 第二把数独游戏 代码
  8. Spring 全局异常拦截根据业务返回不同格式数据 自定义异常
  9. C刷题记录-1020
  10. 总结: 《jQuery基础教程》 1-4章