java oracle 批量更新_Oracle + Mybatis实现批量插入、更新和删除示例代码

前言

Mybatis是web工程开发中非常常用的数据持久化的框架,通过该框架,我们非常容易的进行数据库的增删改查。数据库连接进行事务提交的时候,需要耗费的资源比较多,如果需要插入更新的数据比较多,而且每次事务只提交一条数据,会造成非常大的数据库资源浪费,导致数据库性能、系统性能大幅度下降。

关于mybatis的批量插入,网上的多数示例多半是关于MySQL数据库的,关于Oracle数据库的例子比较少。本文将给大家介绍关于Oracle+Mybatis批量插入、更新和删除的相关内容,下面话不多说了,来一起看看详细的介绍吧。

1、插入

(1)第一种方式:利用标签,将入参的list集合通过UNION ALL生成虚拟数据,从而实现批量插入(验证过)

select seq_LA_T_CONTACT_RECORD.nextval as id from dual

insert into la_t_contact_record

(

id ,

contract_id ,

contacter_add_name ,

contacter_add_type ,

contact_add_phone ,

contact_add_home_address ,

contact_add_work ,

contact_add_work_address ,

create_by ,

create_time ,

modify_by ,

modify_time ,

validate_state ,

sys_source ,

isquery

)

select seq_LA_T_CONTACT_RECORD.NEXTVAL,A.* from(

select

#{dto.contractId,jdbcType=VARCHAR}

,#{dto.contacterAddName,jdbcType=VARCHAR}

,#{dto.contacterAddType,jdbcType=VARCHAR}

,#{dto.contactAddPhone,jdbcType=VARCHAR}

,#{dto.contactAddHomeAddress,jdbcType=VARCHAR}

,#{dto.contactAddWork,jdbcType=VARCHAR}

,#{dto.contactAddWorkAddress,jdbcType=VARCHAR}

,#{dto.createBy,jdbcType=DECIMAL}

,systimestamp

,#{dto.modifyBy,jdbcType=DECIMAL}

,#{dto.modifyTime,jdbcType=TIMESTAMP}

,'1'

,#{dto.sysSource,jdbcType=VARCHAR}

,#{dto.isquery,jdbcType=VARCHAR}

from dual

) A

注意:入参必须是list集合,sql语句中没有values;

(2)第二种方式:利用存储过程实现批量插入(验证过)

begin

insert into lb_t_plan_repayment_otherfee

(

id ,

key ,

value ,

term ,

contract_id,

PAY_ORDER,

FEE_NAME,

INTO_ID

)

values(SEQ_LB_T_PLAN_REPAY_OTHERFEE.nextval

,#{item.key,jdbcType=VARCHAR}

,#{item.value,jdbcType=VARCHAR}

,#{item.term,jdbcType=DECIMAL}

,#{item.contractId,jdbcType=VARCHAR}

,#{item.payOrder,jdbcType=DECIMAL}

,#{item.feeName,jdbcType=VARCHAR}

,#{item.intoId,jdbcType=VARCHAR}

);

end;

注意:入参仍然是list集合,sql中有values,本质是利用存储过程实现批量插入;

(3)第三种方式:使用特殊的sql语句(网上搜到的,待验证)

参考博客:http://blog.csdn.net/w_y_t_/article/details/51416201

下面这条sql语句可以实现一条语句批量插入!

INSERT ALL

INTO USERINFO(userid,username) VALUES('1001','Tom')

INTO USERINFO(userid,username) VALUES('1002','Black')

INTO USERINFO(userid,username) VALUES('1003','Jetty')

INTO USERINFO(userid,username) VALUES('1004','Cat')

SELECT 1 FROM DUAL;

INSERT ALL

INTO USERINFO(userid,username) VALUES(#{userList.userid},#{userList.username})

SELECT 1 FROM DUAL

注意:当list的size大于500时,会失败;

2、更新

(1)第一种方式:同样是利用存储过程(网上搜索的,还是上面那个博客)

UPDATE USERINFO T

T.USERID = #{userlist.userid,jdbcType=VARCHAR},

T.USERNAME = #{userlist.username,jdbcType=VARCHAR},

WHERE

T.USERID = #{userlist.userid,jdbcType=VARCHAR}

(2)第二种方式:利用条件实现(已验证)

update la_t_advfinished t1

set t1.list_stat='07',

t1.modify_time =systimestamp

where t1.id in('${id}')

注意:同样可以使用or的条件实现,类似于下面删除的sql;

3、删除

与更新第二种方式类似

delete from ATTRACTIONS

id=#{item.id}

总结

以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,如果有疑问大家可以留言交流,谢谢大家对脚本之家的支持。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值