SQL批量插入、修改

1. 批量插入

insert into table_A  ( ORDER_CODE, PAYMENT_CODE) values
<foreach item="item" index="index" collection="list" separator=",">
(#{item.ORDER_CODE},if(#{item.PAYMENT_CODE}='',NULL,#{item.PAYMENT_CODE}))

 

2.批量更新

update table_A set
PDH_CNT=
<foreach collection="list" item="item" index="index" separator=" " open="case EFH_SN" close="end">
when #{item.efhSn,jdbcType=VARCHAR} then #{item.pdhCnt,jdbcType=INTEGER}
</foreach>
,DUE_DT=
<foreach collection="list" item="item" index="index" separator=" " open="case EFH_SN" close="end">
when #{item.efhSn,jdbcType=VARCHAR} then #{item.dueDt,jdbcType=TIMESTAMP}
</foreach>
where del_flg=0 and EFH_SN in
<foreach collection="list" index="index" item="item" separator="," open="(" close=")">
#{item.efhSn,jdbcType=VARCHAR}
</foreach>

 

3. table_A 数据导入table_B

INSERT INTO table_B (COMPANY_CODE,ORDER_CODE,PAYMENT_CODE,USER_CODE)

   SELECT COMPANY_CODE,ORDER_CODE,PAYMENT_CODE,USER_CODE FROM table_A 

4.清空表table_A 

truncate table table_A 

转载于:https://www.cnblogs.com/panyw/p/10980935.html

### 使用JPA执行批量插入的手写SQL 为了通过Java Persistence API (JPA) 执行批量插入操作,可以采用手写的原生SQL语句来实现这一目标。下面展示了如何配置以及编写代码来进行批量插入。 #### 配置实体管理器工厂以支持批量处理 确保应用程序上下文中 EntityManagerFactory 的设置允许批处理模式: ```xml <property name="hibernate.jdbc.batch_size" value="50"/> ``` 此属性告知持久层框架每次提交前可累积的最大操作数,在上述例子中为50条记录[^1]。 #### 编写批量插入逻辑 创建一个方法用于接收待插入的数据列表并调用EntityManager的`createNativeQuery()`函数构建原始SQL查询对象;接着利用循环结构逐个添加参数化值至该查询实例内,并最终触发executeUpdate()完成实际数据库更新动作。 ```java public void batchInsert(List<Object[]> data){ String sql = "INSERT INTO department(dno, dname, loc) VALUES (?, ?, ?)"; try { entityManager.getTransaction().begin(); Query query = entityManager.createNativeQuery(sql); for(Object[] row : data){ query.setParameter(1, row[0]); query.setParameter(2, row[1]); query.setParameter(3, row[2]); query.executeUpdate(); // Execute each individual insert if ((i % 50) == 0){ // Flush every 50 records entityManager.flush(); entityManager.clear(); } } entityManager.getTransaction().commit(); } catch(Exception e){ if(entityManager.getTransaction().isActive()){ entityManager.getTransaction().rollback(); } throw new RuntimeException(e.getMessage(),e); } } ``` 在此段代码里,每当累计到一定数量(这里是50)的操作之后就会调用flush()刷新缓存并将更改同步回数据库,随后清除当前的一级缓存以便释放内存资源[^2]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值