mybatis对oracle的批量增删改查
mybatis映射中可以通过<foreach></foreach>标签来实现Oracle的批量插⼊、更新和删除
<foreach>标签中主要有以下属性:
collection、item、index、open、separate、close
collection:该属性必须指定,指代Dao层接⼝传递的数据类型,主要有三种:
①:list集合类型;collection=”list“
②:array数组类型;collection=”array“
③:map映射类型;collection=”map“
item:别名,表⽰集合中每⼀个元素迭代时的别名,获取数据时必须指定⽤别名来指定,不然会报错。
index:迭代下标,即迭代过程中的位置。
open:表⽰语句以什么开始。
separate:表⽰每次迭代之间以什么符号作为分割。
close:表⽰语句以什么结束。
1.<!-- 批量插⼊-->
<insert id="batchInsert" useGeneratedKeys="false" parameterType="java.util.List">
insert into table (id,name,sex,tel,address)
<foreach collection="list" item="item" index="index" open="(" close=")" separator="union all">
select
#{item.id,jdbcType=NUMERIC},
#{item.name,jdbcType=VARCHAR},
#{item.sex,jdbcType=VARCHAR},
#{l,jdbcType=VARCHAR},
#{item.address,jdbcType=VARCHAR}
from dual
</foreach >
</insert>
<insert id="batchInsert" useGeneratedKeys="false" parameterType="java.util.List">
insert into table (id,name,sex,tel,address)
values
<foreach collection="list" item="item" index="index" separator="," >
(#{item.id},#{item.name},#{item.sex},#{l},#{item.address})
</foreach>
</insert>
2.<!-- 批量更新-->
<update id="batchUpdate" parameterType="java.util.List" >
<foreach collection="list" item="item" index="index" open="begin" close=";end;" separator=";">
update table set user_name= #{item.userName,jdbcType=VARCHAR},
rr1= #{1,jdbcType=NUMERIC}
where user_code= #{item.userCode,jdbcType=VARCHAR}  and time_date= #{item.timeDate,jdbcType=VARCHAR}
</foreach>
</update>
<update id="batchUpdate" parameterType="java.util.List">
update table set name = "250" where id in
<foreach collection="list" item="item" index="index" open="(" separator="," close=")" >
#{item}
</foreach>
批量更新sql语句
</update>
注意:批量插⼊和更新时如果数据很多,导致sql语句过长时插⼊或者更新会报错:java.sql.SQLSyntaxErrorException ⽆效的主机/绑定变量名;⼤量数据批量操作可以分批操作;
3.<!-- 批量删除-->
<delete id="batchDelete" parameterType="java.util.List">
delete from table where id in
<foreach collection="list" index="index" item="item" open="(" separator="," close=")">        #{item}
</foreach>
</delete>

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。