Oracle+Mybatis如何实现批量插入、更新和删除操作

这篇文章主要为大家展示了“Oracle+Mybatis如何实现批量插入、更新和删除操作”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“Oracle+Mybatis如何实现批量插入、更新和删除操作”这篇文章吧。

创新互联主要从事成都网站设计、成都做网站、网页设计、企业做网站、公司建网站等业务。立足成都服务佛坪,10年网站建设经验,价格优惠、服务专业,欢迎来电咨询建站服务:028-86922220

前言

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}
 
 
 

以上是“Oracle+Mybatis如何实现批量插入、更新和删除操作”这篇文章的所有内容,感谢各位的阅读!相信大家都有了一定的了解,希望分享的内容对大家有所帮助,如果还想学习更多知识,欢迎关注创新互联行业资讯频道!


当前题目:Oracle+Mybatis如何实现批量插入、更新和删除操作
路径分享:http://pwwzsj.com/article/jijjgd.html