Oracle+Mybatis批量插入,更新和删除
2018-06-18 03:55:44来源:未知 阅读 ()
1、插入
(1)第一种方式:利用<foreach>标签,将入参的list集合通过UNION ALL生成虚拟数据,从而实现批量插入(验证过)
1 <insert id="insertBatchLaTContactRecord" parameterType="java.util.Map">
2 <selectKey resultType="java.lang.Long" keyProperty="dto.id" order="BEFORE">
3 select seq_LA_T_CONTACT_RECORD.nextval as id from dual
4 </selectKey>
5 insert into la_t_contact_record
6 (
7 id ,
8 contract_id ,
9 contacter_add_name ,
10 contacter_add_type ,
11 contact_add_phone ,
12 contact_add_home_address ,
13 contact_add_work ,
14 contact_add_work_address ,
15 create_by ,
16 create_time ,
17 modify_by ,
18 modify_time ,
19 validate_state ,
20 sys_source ,
21 isquery
22 )
23 select seq_LA_T_CONTACT_RECORD.NEXTVAL,A.* from(
24 <foreach collection="list" item="dto" index="index" separator="UNION ALL">
25 select
26 #{dto.contractId,jdbcType=VARCHAR}
27 ,#{dto.contacterAddName,jdbcType=VARCHAR}
28 ,#{dto.contacterAddType,jdbcType=VARCHAR}
29 ,#{dto.contactAddPhone,jdbcType=VARCHAR}
30 ,#{dto.contactAddHomeAddress,jdbcType=VARCHAR}
31 ,#{dto.contactAddWork,jdbcType=VARCHAR}
32 ,#{dto.contactAddWorkAddress,jdbcType=VARCHAR}
33 ,#{dto.createBy,jdbcType=DECIMAL}
34 ,systimestamp
35 ,#{dto.modifyBy,jdbcType=DECIMAL}
36 ,#{dto.modifyTime,jdbcType=TIMESTAMP}
37 ,'1'
38 ,#{dto.sysSource,jdbcType=VARCHAR}
39 ,#{dto.isquery,jdbcType=VARCHAR}
40 from dual
41 </foreach>) A
42 </insert>
注意:入参必须是list集合,sql语句中没有values;
(2)第二种方式:利用存储过程实现批量插入(验证过)
1 <insert id="insertPlanRepaymentOtherfeeBatch" parameterType="java.util.List">
2 begin
3 <foreach collection="list" item="item" index="index">
4 insert into lb_t_plan_repayment_otherfee
5 (
6 id ,
7 key ,
8 value ,
9 term ,
10 contract_id,
11 PAY_ORDER,
12 FEE_NAME,
13 INTO_ID
14 )
15 values(SEQ_LB_T_PLAN_REPAY_OTHERFEE.nextval
16 ,#{item.key,jdbcType=VARCHAR}
17 ,#{item.value,jdbcType=VARCHAR}
18 ,#{item.term,jdbcType=DECIMAL}
19 ,#{item.contractId,jdbcType=VARCHAR}
20 ,#{item.payOrder,jdbcType=DECIMAL}
21 ,#{item.feeName,jdbcType=VARCHAR}
22 ,#{item.intoId,jdbcType=VARCHAR}
23 );
24 </foreach>
25 end;
26 </insert>
注意:入参仍然是list集合,sql中有values,本质是利用存储过程实现批量插入;
(3)第三种方式:使用特殊的sql语句(网上搜到的,待验证)
参考博客:http://blog.csdn.net/w_y_t_/article/details/51416201
下面这条sql语句可以实现一条语句批量插入!
1 INSERT ALL
2 INTO USERINFO(userid,username) VALUES('1001','Tom')
3 INTO USERINFO(userid,username) VALUES('1002','Black')
4 INTO USERINFO(userid,username) VALUES('1003','Jetty')
5 INTO USERINFO(userid,username) VALUES('1004','Cat')
6 SELECT 1 FROM DUAL;
1 <insert id="batchInsertUser" parameterType="java.util.ArrayList">
2 INSERT ALL
3 <foreach collection="list" item="userList" index="index">
4 INTO USERINFO(userid,username) VALUES(#{userList.userid},#{userList.username})
5 </foreach>
6 SELECT 1 FROM DUAL
7 </insert>
注意:当list的size大于500时,会失败;
2、更新
(1)第一种方式:同样是利用存储过程(网上搜索的,还是上面那个博客)
1 <update id="batchUpdateUser" parameterType="java.util.ArrayList">
2 <foreach collection="list" item="userlist" index="index" open="begin" close=";end;" separator=";">
3 UPDATE USERINFO T
4 <set>
5 T.USERID = #{userlist.userid,jdbcType=VARCHAR},
6 T.USERNAME = #{userlist.username,jdbcType=VARCHAR},
7 </set>
8 WHERE
9 T.USERID = #{userlist.userid,jdbcType=VARCHAR}
10 </foreach>
11 </update>
(2)第二种方式:利用条件实现(已验证)
1 <update id="updateBatchByListStat" parameterType="java.util.Map">
2 update la_t_advfinished t1
3 set t1.list_stat='07',
4 t1.modify_time =systimestamp
5 where t1.id in(<foreach collection="ids" separator="," item="id">'${id}'</foreach>)
6 </update>
注意:同样可以使用or的条件实现,类似于下面删除的sql;
3、删除
与更新第二种方式类似
1 <delete id="deleteAttractions" parameterType="java.util.List">
2 delete from ATTRACTIONS
3 <where>
4 <foreach collection="list" index="index" item="item" open="(" separator="or" close=")">
5 id=#{item.id}
6 </foreach>
7 </where>
8 </delete>
标签:
版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com
特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有
- B树和B+树的插入、删除图文详解 2020-06-09
- 如何快速安全的插入千万条数据? 2020-06-03
- RedisTemplate实现消息队列并且批量插入数据。 2020-05-22
- Elasticsearch bulk 批量操作文档 2020-04-18
- Java 插入、隐藏/显示、删除Excel行或列 2020-03-23
IDC资讯: 主机资讯 注册资讯 托管资讯 vps资讯 网站建设
网站运营: 建站经验 策划盈利 搜索优化 网站推广 免费资源
网络编程: Asp.Net编程 Asp编程 Php编程 Xml编程 Access Mssql Mysql 其它
服务器技术: Web服务器 Ftp服务器 Mail服务器 Dns服务器 安全防护
软件技巧: 其它软件 Word Excel Powerpoint Ghost Vista QQ空间 QQ FlashGet 迅雷
网页制作: FrontPages Dreamweaver Javascript css photoshop fireworks Flash