当前位置:   article > 正文

Mybatis使用foreach标签实现批量插入_批量插入 insert 语句 foreach

批量插入 insert 语句 foreach

需求背景:项目中频繁使用导入导出功能来录入数据,但是最开始写的是循环insert,性能非常慢,后面考虑优化成了批量提交方式。

在这里我给大家实现了两种数据库的批量插入,因为我们项目是兼容MySQL、Oracle的。

MySQL方式:

  1. <insert id="commonBatchMysqlInsert">
  2. INSERT INTO ${tableName} (
  3. <foreach collection="keys" item="key" separator=",">
  4. ${key}
  5. </foreach>
  6. ) VALUES
  7. <foreach collection="values" item="list" separator=",">
  8. (
  9. <foreach collection="list" item="item" separator=",">
  10. <choose>
  11. <when test="item.type == 0">
  12. #{item.value}
  13. </when>
  14. <otherwise>
  15. ${item.value}
  16. </otherwise>
  17. </choose>
  18. </foreach>
  19. )
  20. </foreach>
  21. </insert>

dao层:

Oracle方式:

  1. <insert id="commonBatchOracleInsert">
  2. INSERT INTO ${tableName} (
  3. <foreach collection="keys" item="key" separator=",">
  4. ${key}
  5. </foreach>
  6. )
  7. <foreach collection="values" item="list" separator="union all">
  8. select
  9. <foreach collection="list" item="item" separator=",">
  10. <choose>
  11. <when test="item.type == 0">
  12. #{item.value}
  13. </when>
  14. <when test="item.type == 2">
  15. null
  16. </when>
  17. <otherwise>
  18. ${item.value}
  19. </otherwise>
  20. </choose>
  21. </foreach>
  22. from dual
  23. </foreach>
  24. </insert>

dao层:

DataType类,主要是存放当前列信息,之所以加这个是因为Oracle数据库日期类型要加TO_DATE函数,然后日期字段就会设置type值,最后通过if标签判断当前列是${}还是#{}。

注意!!!

我这里的批量插入接口是公共接口,所以我用的是map对象,没有实体类。

题外话:我们这里也实现了批量插入中,如果插入失败的情况下,找到具体哪一条失败,然后将数据写入到Excel文件,提供用户下载,如果有需要可以私信dd我。

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/空白诗007/article/detail/749178
推荐阅读
相关标签
  

闽ICP备14008679号