91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Oracle+Mybatis如何實現批量插入、更新和刪除操作

發布時間:2021-07-10 14:59:27 來源:億速云 閱讀:884 作者:小新 欄目:編程語言

這篇文章主要為大家展示了“Oracle+Mybatis如何實現批量插入、更新和刪除操作”,內容簡而易懂,條理清晰,希望能夠幫助大家解決疑惑,下面讓小編帶領大家一起研究并學習一下“Oracle+Mybatis如何實現批量插入、更新和刪除操作”這篇文章吧。

前言

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

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

1、插入

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

<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)第二種方式:利用存儲過程實現批量插入(驗證過)

<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語句可以實現一條語句批量插入!

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 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)第一種方式:同樣是利用存儲過程(網上搜索的,還是上面那個博客)

<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)第二種方式:利用條件實現(已驗證)

<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、刪除

與更新第二種方式類似

<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>

以上是“Oracle+Mybatis如何實現批量插入、更新和刪除操作”這篇文章的所有內容,感謝各位的閱讀!相信大家都有了一定的了解,希望分享的內容對大家有所幫助,如果還想學習更多知識,歡迎關注億速云行業資訊頻道!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

达拉特旗| 疏勒县| 南丰县| 怀仁县| 泗阳县| 葵青区| 社会| 淅川县| 灵石县| 紫金县| 临猗县| 冕宁县| 平泉县| 宁波市| 株洲市| 师宗县| 延边| 竹北市| 无为县| 宜春市| 凭祥市| 望城县| 修武县| 张家港市| 郓城县| 六安市| 东乌珠穆沁旗| 玛曲县| 伊宁县| 合江县| 齐齐哈尔市| 邻水| 临汾市| 犍为县| 武宣县| 浦江县| 龙里县| 白河县| 福泉市| 社旗县| 绵阳市|