Oracle + Mybatis實現(xiàn)批量插入、更新和刪除示例代碼
前言
Mybatis是web工程開發(fā)中非常常用的數(shù)據(jù)持久化的框架,通過該框架,我們非常容易的進行數(shù)據(jù)庫的增刪改查。數(shù)據(jù)庫連接進行事務提交的時候,需要耗費的資源比較多,如果需要插入更新的數(shù)據(jù)比較多,而且每次事務只提交一條數(shù)據(jù),會造成非常大的數(shù)據(jù)庫資源浪費,導致數(shù)據(jù)庫性能、系統(tǒng)性能大幅度下降。
關于mybatis的批量插入,網(wǎng)上的多數(shù)示例多半是關于MySQL數(shù)據(jù)庫的,關于Oracle數(shù)據(jù)庫的例子比較少。本文將給大家介紹關于Oracle+Mybatis批量插入、更新和刪除的相關內(nèi)容,下面話不多說了,來一起看看詳細的介紹吧。
1、插入
(1)第一種方式:利用<foreach>標簽,將入?yún)⒌膌ist集合通過UNION ALL生成虛擬數(shù)據(jù),從而實現(xiàn)批量插入(驗證過)
<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>
注意:入?yún)⒈仨毷莑ist集合,sql語句中沒有values;
(2)第二種方式:利用存儲過程實現(xiàn)批量插入(驗證過)
<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>
注意:入?yún)⑷匀皇莑ist集合,sql中有values,本質是利用存儲過程實現(xiàn)批量插入;
(3)第三種方式:使用特殊的sql語句(網(wǎng)上搜到的,待驗證)
參考博客:http://blog.csdn.net/w_y_t_/article/details/51416201
下面這條sql語句可以實現(xiàn)一條語句批量插入!
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)第一種方式:同樣是利用存儲過程(網(wǎng)上搜索的,還是上面那個博客)
<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)第二種方式:利用條件實現(xiàn)(已驗證)
<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的條件實現(xiàn),類似于下面刪除的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>
總結
以上就是這篇文章的全部內(nèi)容了,希望本文的內(nèi)容對大家的學習或者工作具有一定的參考學習價值,如果有疑問大家可以留言交流,謝謝大家對腳本之家的支持。
相關文章
Intelli IDEA安裝Scala插件并安裝Scala軟件和配置環(huán)境變量的詳細教程
這篇文章主要介紹了Intelli IDEA安裝Scala插件并安裝Scala軟件和配置環(huán)境變量的詳細教程,需要的朋友可以參考下2020-10-10
SpringBoot攔截器實現(xiàn)登錄攔截的方法示例
這篇文章主要介紹了SpringBoot攔截器實現(xiàn)登錄攔截的方法示例,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧2019-09-09
SpringBoot之logback-spring.xml不生效的解決方法
這篇文章主要介紹了SpringBoot之logback-spring.xml不生效的解決方法,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2018-01-01
springboot vue組件開發(fā)實現(xiàn)接口斷言功能
這篇文章主要為大家介紹了springboot+vue組件開發(fā)實現(xiàn)接口斷言功能,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪2022-05-05

