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}
,''
,#{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('','Tom')
INTO USERINFO(userid,username) VALUES('','Black')
INTO USERINFO(userid,username) VALUES('','Jetty')
INTO USERINFO(userid,username) VALUES('','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='',
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批量插入,更新和删除的更多相关文章

  1. oracle+mybatis批量插入踩坑记

    最近在项目中需要使用oracle+mybatis批量插入数据,因为自增主键,遇到问题,现记录如下: 一.常用的两种sql写法报错 1.insert ... values ... <insert ...

  2. 解决Oracle+Mybatis批量插入报错:SQL 命令未正确结束

    Mybatis批量插入需要foreach元素.foreach元素有以下主要属性: (1)item:集合中每一个元素进行迭代时的别名. (2)index:指定一个名字,用于表示在迭代过程中,每次迭代到的 ...

  3. oracle mybatis批量插入,无匹配找默认

    批量插入<insert id="insertIndi" parameterType="java.util.HashMap" useGeneratedKey ...

  4. Oracle + Mybatis批量插入数据,xml.mapper种的写法

    1,把表中去年所有的信息全部复制作为今年的数据,即查询出去年所有的数据然后复制插入 <insert id="cover" parameterType="java.l ...

  5. springMVC 接收数组参数,mybatis 接收数组参数,mybatis批量插入/批量删除案例

    案例是给一个用户赋予多个权限,多个权限用其对应的主键 id 为参数,组成了 一个id数组,传给springMVC,然后springMVC传给mybatis,然后mybatis批量插入.其实类似的场景还 ...

  6. mybatis批量插入数据到oracle

    mybatis 批量插入数据到oracle报 ”java.sql.SQLException: ORA-00933: SQL 命令未正确结束“  错误解决方法 oracle批量插入使用 insert a ...

  7. mybatis批量插入oracle时报错:unique constraint (table name) violated

    mybatis批量插入oracle时报错:unique constraint (table name) violated,是因为插入的集合中有两条相同唯一约束的数据.

  8. mybatis批量插入、批量删除

    mybatis 批量插入 int addBatch(@Param("list")List<CustInfo> list); <insert id="ad ...

  9. mybatis oracle mysql 批量插入时的坑爹问题--需谨记

    mybatis oracle mysql 批量插入一.oracle的批量插入方式insert into db(id, zgbh, shbzh) select '1', '2', '3' from du ...

随机推荐

  1. weex 知识点

    使用 weex init [project_name] 创建的项目,执行 npm run dev 后,在 public/dist 文件夹里面就生成了两个对应的js,一个是index.web.js, 一 ...

  2. EditorConfig知识点

    .editorconfig 该文件定义项目的编码规范,编辑器的行为会与.editorconfig 文件中定义的一致,并且其优先级比编辑器自身的设置要高,这在多人合作开发项目时十分有用而且必要. 在哪里 ...

  3. JavaScriptSerializer类 对象序列化为JSON,JSON反序列化为对象 。

    JavaScriptSerializer 类由异步通信层内部使用,用于序列化和反序列化在浏览器和 Web 服务器之间传递的数据.说白了就是能够直接将一个C#对象传送到前台页面成为javascript对 ...

  4. IE 10 如何设置支持CRM4 正常浏览

    通过工具—> 选择兼容性视图 就可以了.具体如下图:

  5. Windows 客户端时间更新脚本NTP

    Windows XP 客户端时间更新脚本NTP ::Windows XP 客户端时间更新脚本NTP reg add "HKEY_LOCAL_MACHINE\SOFTWARE\Microsof ...

  6. 2013-8-6 ubuntu基本操作

    1,apt-get下载文件默认安装路径 apt-get 下载后,软件所在路径是什么?? /var/cache/apt/archives ubuntu 默认的PATH为 PATH=/home/brigh ...

  7. 2013-7-28 802.11n帧聚合

    芯片开发阶段的帧聚合迥异于商用AP,前者更偏向实现过程,后者偏向结果.也就是说用户在使用商用设备时不会管你特性是如何实现的,他们只关心效果,开启这个功能能否实实在在的提高AP的吞吐量. 网上搜索了众多 ...

  8. SpringCloud之最大的坑

    就一句话,controller里面的API方法千万不要夹@Bean,因为加了这个就变成预编译的了!!!!不能断点不能log!!!!!!当然,如果想项目启动就执行的话,那就加上这个.

  9. bzoj4271: chemistry 化学

    给定点数n<=500,无标号,度<=4,无根树计数 预处理 无标号,孩子数<=3的有根树个数g 无标号,含k棵树,孩子数<=3的有根树森林个数s[k] 考虑大小为n的无根树的重 ...

  10. bzoj3631 松鼠的新家

    Description 松鼠的新家是一棵树,前几天刚刚装修了新家,新家有n个房间,并且有n-1根树枝连接,每个房间都可以相互到达,且俩个房间之间的路线都是唯一的.天哪,他居然真的住在“树”上.松鼠想邀 ...