spring JDBCTemplate 批量插入 返回id 批量插入返回批量id

2023-11-01

http://www.iteye.com/topic/1135650

1.插入一条记录返回刚插入记录的id

Java代码   收藏代码
  1. public int addBean(final Bean b){  
  2.           
  3.         final String strSql = "insert into buy(id,c,s,remark,line,cdatetime," +  
  4.                 "c_id,a_id,count,type) values(null,?,?,?,?,?,?,?,?,?)";  
  5.         KeyHolder keyHolder = new GeneratedKeyHolder();  
  6.           
  7.         this.getJdbcTemplate().update(  
  8.                 new PreparedStatementCreator(){  
  9.                     public java.sql.PreparedStatement createPreparedStatement(Connection conn) throws SQLException{  
  10.                         int i = 0;  
  11.                         java.sql.PreparedStatement ps = conn.prepareStatement(strSql);   
  12.                         ps = conn.prepareStatement(strSql, Statement.RETURN_GENERATED_KEYS);  
  13.                         ps.setString(++i, b.getC());  
  14.                         ps.setInt(++i,b.getS() );  
  15.                         ps.setString(++i,b.getR() );  
  16.                         ps.setString(++i,b.getline() );  
  17.                         ps.setString(++i,b.getCDatetime() );  
  18.                         ps.setInt(++i,b.getCId() );  
  19.                         ps.setInt(++i,b.getAId());  
  20.                         ps.setInt(++i,b.getCount());  
  21.                         ps.setInt(++i,b.getType());  
  22.                         return ps;  
  23.                     }  
  24.                 },  
  25.                 keyHolder);  
  26.       
  27.         return keyHolder.getKey().intValue();  
  28.     }  

 2.批量插入数据

Java代码   收藏代码
  1. public void addBuyBean(List<BuyBean> list)   
  2.     {   
  3.        final List<BuyBean> tempBpplist = list;   
  4.        String sql="insert into buy_bean(id,bid,pid,s,datetime,mark,count)" +  
  5.             " values(null,?,?,?,?,?,?)";   
  6.        this.getJdbcTemplate().batchUpdate(sql,new BatchPreparedStatementSetter() {  
  7.   
  8.             @Override  
  9.             public int getBatchSize() {  
  10.                  return tempBpplist.size();   
  11.             }  
  12.             @Override  
  13.             public void setValues(PreparedStatement ps, int i)  
  14.                     throws SQLException {  
  15.                   ps.setInt(1, tempBpplist.get(i).getBId());   
  16.                   ps.setInt(2, tempBpplist.get(i).getPId());   
  17.                   ps.setInt(3, tempBpplist.get(i).getS());   
  18.                   ps.setString(4, tempBpplist.get(i).getDatetime());   
  19.                   ps.setString(5, tempBpplist.get(i).getMark());                   
  20.                   ps.setInt(6, tempBpplist.get(i).getCount());  
  21.             }   
  22.       });   
  23.     }  

 3.批量插入并返回批量id

注:由于JDBCTemplate不支持批量插入后返回批量id,所以此处使用jdbc原生的方法实现此功能

Java代码   收藏代码
  1. public List<Integer> addProduct(List<ProductBean> expList) throws SQLException {  
  2.        final List<ProductBean> tempexpList = expList;  
  3.         
  4.        String sql="insert into product(id,s_id,status,datetime,"  
  5.             + " count,o_id,reasons"  
  6.             + " values(null,?,?,?,?,?,?)";  
  7.          
  8.        DbOperation dbOp = new DbOperation();  
  9.        dbOp.init();  
  10.        Connection con = dbOp.getConn();  
  11.        con.setAutoCommit(false);  
  12.        PreparedStatement pstmt = con.prepareStatement(sql, PreparedStatement.RETURN_GENERATED_KEYS);  
  13.        for (ProductBean n : tempexpList) {  
  14.            pstmt.setInt(1,n.getSId());     
  15.            pstmt.setInt(2,n.getStatus());   
  16.            pstmt.setString(3,n.getDatetime());   
  17.            pstmt.setInt(4,n.getCount());  
  18.            pstmt.setInt(5,n.getOId());  
  19.            pstmt.setInt(6,n.getReasons());  
  20.            pstmt.addBatch();  
  21.        }  
  22.        pstmt.executeBatch();   
  23.        con.commit();     
  24.        ResultSet rs = pstmt.getGeneratedKeys(); //获取结果  
  25.        List<Integer> list = new ArrayList<Integer>();   
  26.        while(rs.next()) {  
  27.            list.add(rs.getInt(1));//取得ID  
  28.        }  
  29.        con.close();  
  30.        pstmt.close();  
  31.        rs.close();  
  32.          
  33.        return list;  
  34.          
  35. }  

 

以上三组代码直接复制把对应的实体类名一改就可以直接使用在项目中,希望对大家有帮助

返回顶楼
 
  • ahack
  • 等级: 初级会员
  • 文章: 18
  • 积分: 30
   发表时间:2014-10-04   最后修改:2014-10-04
的确用KeyHolder就可以了,简单封装下吧挨个set好费劲。 
Java代码   收藏代码
  1. public SysTask createNewTask(final SysTask sysTask) {  
  2.         KeyHolder keyHolder = new GeneratedKeyHolder();  
  3.         jdbcTemplate.update(new PreparedStatementCreator() {  
  4.             public PreparedStatement createPreparedStatement(Connection conn) throws SQLException {  
  5.                 String[] str = new String[] {"task_type","domain_id","machine_id","status"};  
  6.                 Object[] obj = new Object[]{sysTask.getTaskType(),sysTask.getDomainId(),sysTask.getMachineId(),sysTask.getStatus()};  
  7.                 PreparedStatement ps = conn.prepareStatement("insert into sys_task (task_type,domain_id,machine_id,status,publish_time) values(?,?,?,?,now())",  
  8.                     str  
  9.                 );  
  10.                 for (int i = 0; i < obj.length; i++) {  
  11.                     ps.setObject(i+1, obj[i]);  
  12.                 }  
  13.                 return ps;  
  14.             }  
  15.         }, keyHolder);  
  16.         int taskId = keyHolder.getKey().intValue();//返回taskId  
  17.         return getTaskById(taskId);  
  18.     }  

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

spring JDBCTemplate 批量插入 返回id 批量插入返回批量id 的相关文章

  • 拥有更多列或更多行会更高效吗?

    我目前正在重新设计一个可能包含大量数据的数据库 我可以选择在数据库中包含许多不同的列或使用大量行 如果我在下面做一些大纲 可能会更容易 item id user id title description content category t
  • 如何使用 SimpleDateFormat 解析多种格式的日期

    我正在尝试解析文档中的一些日期 用户似乎以类似但不完全相同的格式输入了这些日期 以下是格式 9 09 9 2009 09 2009 9 1 2009 9 1 2009 尝试解析所有这些内容的最佳方法是什么 这些似乎是最常见的 但我想让我困扰
  • 如何从秘密字符串中制作 HMAC_SHA256 密钥以在 jose4j 中与 JWT 一起使用?

    我想生成 JWT 并使用 HMAC SHA256 对其进行签名 对于该任务我必须使用jose4j https bitbucket org b c jose4j wiki Home 我尝试根据秘密生成密钥 SecretKeySpec key
  • 从表中选择行,其中另一个表中具有相同 id 的行在另一列中具有特定值

    在 MySQL 中 如果我们有两个表 comments key value 1 foo 2 bar 3 foobar 4 barfoo and meta comment key value 1 1 2 1 3 2 4 1 我想得到来自以下人
  • 在文本文件中搜索单词并返回其频率

    如何在包含单词文本的文本文件中搜索特定单词并返回其频率或出现次数 使用扫描仪 String text Question how to search for a particular word in a text file containin
  • 记录骆驼路线

    我的项目中有几个 Camel 上下文 如果可能的话 我想以逆向工程方式记录路线 因为我们希望保持与上下文相关的文档最新 最好的方法是什么 我们倾向于预先实际设计路线 并使用来自EIP book http www eaipatterns co
  • MySQL如何获取unix时间戳的时间差

    我有一个保存值1506947452的变量 需要使用公式从该日期提取分钟 started data now date 但started date采用unix时间戳格式10位int数字 我以ajax形式收到并需要放入mysql查询i试试这个 S
  • 内存一致性 - Java 中的happens-before关系[重复]

    这个问题在这里已经有答案了 在阅读有关内存一致性错误的 Java 文档时 我发现与创建 发生 之前 关系的两个操作相关的点 当语句调用时Thread start 每个具有 与该语句发生之前的关系也有一个 与 new 执行的每个语句之间发生的
  • 具有共享依赖项的多模块项目的 Gradle 配置

    使用 gradle 制作第一个项目 所以我研究了 spring gradle hibernate 项目如何组织 gradle 文件 并开始制作自己的项目 但是 找不到错误 为什么我的配置不起作用 子项目无法解决依赖关系 所以项目树 Root
  • Java 服务器-客户端 readLine() 方法

    我有一个客户端类和一个服务器类 如果客户端向服务器发送消息 服务器会将响应发送回客户端 然后客户端将打印它收到的所有消息 例如 如果客户端向服务器发送 A 则服务器将向客户端发送响应 1111 所以我在客户端类中使用 readLine 从服
  • 在 MySQL 数据库中保持 TEXT 字段唯一的最佳方法

    我想让 TEXT 字段的值在我的 MySQL 表中唯一 经过小型研究 我发现由于性能问题 每个人都不鼓励在 TEXT 字段上使用 UNIQUE INDEX 我现在想用的是 1 创建另一个字段来包含 TEXT 值的哈希值 md5 text v
  • 如何记录来自 Akka (Java) 的所有传入消息

    在 Scala 中 您可以使用 LoggingReceive 包装接收函数 如何通过 Java API 实现相同的目标 def receive LoggingReceive case x do something Scala API 有Lo
  • Espresso 和 Proguard 的 Java.lang.NoClassDefFoundError

    我对 Espresso 不太有经验 但我终于成功地运行了它 我有一个应用程序需要通过 Proguard 缩小才能处于 56K 方法之下 该应用程序以 3 秒的动画开始 因此我需要等到该动画结束才能继续 这就是我尝试用该方法做的事情waitF
  • 逃离的正确方法是什么?使用 Oracle 12c MATCH_RECOGNIZE 时 JDBCPreparedStatement 中的字符?

    以下查询在 Oracle 12c 中是正确的 SELECT FROM dual MATCH RECOGNIZE MEASURES a dummy AS dummy PATTERN a DEFINE a AS 1 1 但它不能通过 JDBC
  • 尝试使用等于“是”或“否”的字符串变量重新启动 do-while 循环

    计算行程距离的非常简单的程序 一周前刚刚开始 我有这个循环用于解决真或假问题 但我希望它适用于简单的 是 或 否 我为此分配的字符串是答案 public class Main public static void main String a
  • JVM:是否可以操作帧堆栈?

    假设我需要执行N同一线程中的任务 这些任务有时可能需要来自外部存储的一些值 我事先不知道哪个任务可能需要这样的值以及何时 获取速度要快得多M价值观是一次性的而不是相同的M值在M查询外部存储 注意我不能指望任务本身进行合作 它们只不过是 ja
  • Java的-XX:+UseMembar参数是什么

    我在各种地方 论坛等 看到这个参数 并且常见的答案是它有助于高并发服务器 尽管如此 我还是找不到 sun 的官方文档来解释它的作用 另外 它是Java 6中添加的还是Java 5中存在的 顺便说一句 许多热点虚拟机参数的好地方是这一页 ht
  • Java:多线程内的 XA 事务传播

    我如何使用事务管理器 例如Bitronix http docs codehaus org display BTM Home JBoss TS http www jboss org jbosstm or Atomikos http www a
  • JAXB - 列表<可序列化>?

    我使用 xjc 制作了一些课程 public class MyType XmlElementRefs XmlElementRef name MyInnerType type JAXBElement class required false
  • Android 和 Java 中绘制椭圆的区别

    在Java中由于某种原因Ellipse2D Double使用参数 height width x y 当我创建一个RectF在Android中参数是 left top right bottom 所以我对适应差异有点困惑 如果在 Java 中创

随机推荐

  • CentOS 7安装postgres数据库

    一 yum安装postgres 1 下载所需要的数据库版本https yum postgresql org repopackages php https yum postgresql org repopackages php 2 安装数据库
  • 【机器学习】传统目标检测算法之DPM

    前面介绍了一下HOG HOG有一个缺点 很难处理遮挡问题 人体姿势动作幅度过大或物体方向改变也不易检测 继2005年HOG提出之后 DPM模型在借鉴了HOG之后也被提了出来同时还取得了不错的成绩 DPM概述 DPM Deformable P
  • 使用计算机计算3乘8时需完成,计算机组成与系统结构第二章习题及答案

    一 填空题 20每空2分 1 计数制中使用的数据个数被称为 基 2 移码常用来表示浮点数的 部分 移码和补码比较 它们除 外 其他各位都相同 阶码 符号位 3 码值80H 若表示真值0 则为 若表示 128 则为 若表示 127 则为 若表
  • Node.js 使用详情

    Node js 是一个基于 Chrome V8 引擎的 JavaScript 运行时环境 它使得开发者能够使用 JavaScript 编写服务器端应用程序 在本文中 我们将详细讨论 Node js 的特点 使用方法以及一些实际应用的代码示例
  • mysql使用索引为什么查询速度变快很多?

    首先来看看表是否有索引的命令 show index from 表名 看到主键索引 索引类型是BTREE 二叉树 正是因为这个二叉树算法 让查询速度快很多 二叉树的原理 就是取最中间的一个数 然后把大于这个数的往右边排 小于这个数的就向左排
  • 贝叶斯网络模型基础——R语言

    笔者近期在学习贝叶斯网络模型相关知识的时候 分别使用了Matlab python R Netica GeNIe unbbayes等 这些软件各有千秋 但是R语言必须安利给大家 希望大家指正 R语言 R是用于统计分析 绘图的语言和操作环境 R
  • golang 实现:给定一个字符串 s ,请你找出其中不含有重复字符的 最长子串 的长度。

    示例 1 输入 s abcabcbb 输出 3 解释 因为无重复字符的最长子串是 abc 所以其长度为 3 示例 2 输入 s bbbbb 输出 1 解释 因为无重复字符的最长子串是 b 所以其长度为 1 示例 3 输入 s pwwkew
  • 基础功能测试的一些实质建议 来自土土松的博客

    基础功能测试的一些实质建议 来自土土松的博客 总结的真不错 要好好积累 1 对于旧的稳定的程序 一旦新添加功能 尤其是调用旧模块的功能的 回归测试的工作量大而枯燥 不可避免 针对此条 对于LEADER而言 最大的难处在于时间风险的估算 最好
  • java入门代码大全,2022最新

    java基础入门 理解Java条件语句条件语句根据不同的判断条件执行不同的代码 if条件语句if条件主要用于告知程序当某一个条件成立时 须执行满足该条件的相关语句 if条件语句可分为if条件语句 if else语句和if else if多分
  • 基于STM32的超声波感应垃圾桶

    目录 成果演示 材料 主要代码 总结 成果演示 材料 STM323f103开发板 最小系统均可 超声波模块 HC SR04模块 舵机一个 垃圾桶模型 主要代码 超声波模块 include ultrasonsic h include dela
  • 【分布式】ceph存储

    目录 一 存储基础 单机存储设备 单机存储的问题 商业存储解决方案 二 分布式存储 软件定义的存储 SDS 分布式存储的类型 Ceph 优势 Ceph 架构 Ceph 核心组件 Pool中数据保存方式支持两种类型 Pool PG 和 OSD
  • Python 爬虫进阶必备

    今日网站 aHR0cDovL21hdGNoLnl1YW5yZW54dWUuY29tL21hdGNoLzE 这个网站是某大佬搭建的闯关网站 无限 debugger 的绕过 打开开发者工具会出现 debugger 直接在 debugger 对应
  • 前端启用,禁用按钮

    我们有时候有这样的需求 当我们点击按钮以后 需要把它设为不可点击的状态 然后用的时候也需要把它设置为可点击的状态 这个使用就需要我们使用js来动态的控制它们 下面是具体的代码 一 禁用按钮 1 最简单的方式 静态的不可点击
  • 数据库题目汇总(上)

    文章目录 题目来源 题目及mysql语句如下 第一题 第二题 第三道 第四题 第五题 第六题 第七题 第八题 第九题 第十题 题目来源 最近上的数据库开发课程布置了一些sql题目 写到头秃 题目及mysql语句如下 第一题 编写一个sql语
  • 数据集重命名排序报错问题(FileExistsError: [WinError 183] 当文件已存在时,无法创建该文件)

    问题描述 Traceback most recent call last File E Tool code rename py line 72 in
  • Linux学习笔记--一些错误的记录

    运行linux的时候 输入shutdown r now命令提示 bash shutdown is not found 出现这个错误是因为这条命令没有加入到系统的配置文件中 运行命令export PATH PATH sbin即可解决 转载于
  • VC10中的C++0x特性 Part 2 (3):右值引用

    VC10中的C 0x特性 Part 2 3 右值引用 来源 vcblog 作者 Stephan T Lavavej 翻译 飘飘白云 转载时请注明作者和出处 未经许可 请勿用于商业用途 简介 这一系列文章介绍Microsoft Visual
  • 虚拟内存、虚拟地址空间和物理地址空间(内存管理)

    文章目录 前言 一 虚拟地址和物理地址 二 虚拟内存 三 为什么引入虚拟内存 前言 虚拟内存 虚拟地址空间和物理地址空间 一 虚拟地址和物理地址 地址空间是一个非负整数地址的有序集合 在一个带虚拟内存的系统中 CPU从一个有N pow 2
  • vue3使用ElementPlus的消息el-message样式不生效或者被遮盖(z-index)

    问题1 el message自定义样式不生效 想改弹出框的位置时不生效 使用了el message的自定义类的custom class属性也不行 原因应该是加了scoped后使用到里面样式的dom会添加data v xxxx这种属性防止cs
  • spring JDBCTemplate 批量插入 返回id 批量插入返回批量id

    http www iteye com topic 1135650 1 插入一条记录返回刚插入记录的id Java代码 public int addBean final Bean b final String strSql insert in