国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 開發 > Java > 正文

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

2024-07-13 10:16:38
字體:
來源:轉載
供稿:網友

前言

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>

總結

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


注:相關教程知識閱讀請移步到JAVA教程頻道。
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 扎囊县| 荣成市| 临潭县| 金溪县| 斗六市| 崇礼县| 合阳县| 贵溪市| 平定县| 宣化县| 织金县| 都昌县| 镇远县| 松溪县| 循化| 腾冲县| 怀远县| 唐海县| 淮滨县| 沾益县| 海安县| 资中县| 横山县| 桂林市| 南汇区| 达尔| 桐庐县| 仁怀市| 浮山县| 顺义区| 邳州市| 江永县| 西昌市| 阿尔山市| 安远县| 泰兴市| 手机| 阳谷县| 北川| 璧山县| 中超|