激情久久久_欧美视频区_成人av免费_不卡视频一二三区_欧美精品在欧美一区二区少妇_欧美一区二区三区的

服務器之家:專注于服務器技術及軟件下載分享
分類導航

PHP教程|ASP.NET教程|Java教程|ASP教程|編程技術|正則表達式|C/C++|IOS|C#|Swift|Android|VB|R語言|JavaScript|易語言|vb.net|

服務器之家 - 編程語言 - Java教程 - Oracle + Mybatis實現批量插入、更新和刪除示例代碼

Oracle + Mybatis實現批量插入、更新和刪除示例代碼

2021-03-19 12:16dahaihh Java教程

利用MyBatis動態SQL的特性,我們可以做一些批量的操作,下面這篇文章主要給大家介紹了關于Oracle + Mybatis實現批量插入、更新和刪除的相關資料,文中通過示例代碼介紹的非常詳細,需要的朋友可以參考借鑒,下面來一起看看吧。

前言

Mybatis是web工程開發中非常常用的數據持久化的框架,通過該框架,我們非常容易的進行數據庫的增刪改查。數據庫連接進行事務提交的時候,需要耗費的資源比較多,如果需要插入更新的數據比較多,而且每次事務只提交一條數據,會造成非常大的數據庫資源浪費,導致數據庫性能、系統性能大幅度下降。

關于mybatis的批量插入,網上的多數示例多半是關于MySQL數據庫的,關于Oracle數據庫的例子比較少。本文將給大家介紹關于Oracle+Mybatis批量插入、更新和刪除的相關內容,下面話不多說了,來一起看看詳細的介紹吧。

1、插入

(1)第一種方式:利用<foreach>標簽,將入參的list集合通過UNION ALL生成虛擬數據,從而實現批量插入(驗證過)

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
<insert id="insertBatchLaTContactRecord" parameterType="java.util.Map">
 <selectKey resultType="java.lang.Long" keyProperty="dto.id" order="BEFORE">
    select seq_LA_T_CONTACT_RECORD.nextval as id from dual
 </selectKey>
   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(
 <foreach collection="list" item="dto" index="index" separator="UNION ALL">
  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
 </foreach>) A
</insert>

   注意:入參必須是list集合,sql語句中沒有values;

(2)第二種方式:利用存儲過程實現批量插入(驗證過)

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
<insert id="insertPlanRepaymentOtherfeeBatch" parameterType="java.util.List">
  begin
  <foreach collection="list" item="item" index="index">
   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}
   );
  </foreach>
  end;
 </insert>

  注意:入參仍然是list集合,sql中有values,本質是利用存儲過程實現批量插入;

(3)第三種方式:使用特殊的sql語句(網上搜到的,待驗證) 

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

  下面這條sql語句可以實現一條語句批量插入!

?
1
2
3
4
5
6
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;
?
1
2
3
4
5
6
7
<insert id="batchInsertUser" parameterType="java.util.ArrayList">
INSERT ALL
  <foreach collection="list" item="userList" index="index">
   INTO USERINFO(userid,username) VALUES(#{userList.userid},#{userList.username})
  </foreach>
  SELECT 1 FROM DUAL
</insert>

  注意:當list的size大于500時,會失敗;

2、更新

 (1)第一種方式:同樣是利用存儲過程(網上搜索的,還是上面那個博客)

?
1
2
3
4
5
6
7
8
9
10
11
<update id="batchUpdateUser" parameterType="java.util.ArrayList">
 <foreach collection="list" item="userlist" index="index" open="begin" close=";end;" separator=";">
  UPDATE USERINFO T
   <set>
   T.USERID = #{userlist.userid,jdbcType=VARCHAR},
   T.USERNAME = #{userlist.username,jdbcType=VARCHAR},
   </set>
   WHERE
   T.USERID = #{userlist.userid,jdbcType=VARCHAR}
 </foreach>
</update>

(2)第二種方式:利用條件實現(已驗證)

?
1
2
3
4
5
6
<update id="updateBatchByListStat" parameterType="java.util.Map">
 update la_t_advfinished t1
    set t1.list_stat='07',
    t1.modify_time     =systimestamp
   where t1.id in(<foreach collection="ids" separator="," item="id">'${id}'</foreach>)
</update>

  注意:同樣可以使用or的條件實現,類似于下面刪除的sql;

3、刪除

與更新第二種方式類似

?
1
2
3
4
5
6
7
8
<delete id="deleteAttractions" parameterType="java.util.List">
 delete from ATTRACTIONS
 <where>
 <foreach collection="list" index="index" item="item" open="(" separator="or" close=")"
 id=#{item.id}
 </foreach>
 </where>
 </delete>

總結

以上就是這篇文章的全部內容了,希望本文的內容對大家的學習或者工作具有一定的參考學習價值,如果有疑問大家可以留言交流,謝謝大家對服務器之家的支持。

原文鏈接:http://www.cnblogs.com/dahaihh-2018/p/8259441.html

延伸 · 閱讀

精彩推薦
主站蜘蛛池模板: 亚洲尻逼视频 | 国产精品9191 | 精品久久久久久久久久久下田 | 欧美国产永久免费看片 | 99精品国产在热久久婷婷 | 日本中文字幕电影在线观看 | 免费观看又色又爽又黄的崩锅 | 国产精品久久久久国产精品三级 | 国产精品视频免费网站 | 国产午夜亚洲精品午夜鲁丝片 | 史上最强炼体老祖动漫在线观看 | 欧美黄色一区 | 九九热免费视频在线观看 | 久久蜜桃香蕉精品一区二区三区 | 一级毛片免费观看在线 | 怦然心动50免费完整版 | 一区二区三区黄色 | 久草在线免费看 | 最新中文在线视频 | 午夜视频在线观 | 欧美性成人 | 国产一级毛片高清视频完整版 | 久久久久国产成人免费精品免费 | 国产精品视频免费看 | 欧美成人性生活片 | av在线在线| 精品国产96亚洲一区二区三区 | av免费提供 | 一区二区三高清 | 精品一区二区三区不卡 | 久久久免费观看完整版 | 极品国产91在线网站 | 好吊色欧美一区二区三区四区 | 青热久思思 | 性感美女一级毛片 | 黄色成人av在线 | 欧美成人三级视频 | 日韩视频一二区 | 黄网站在线免费看 | 国产精品九九久久一区hh | avlululu|