方法1:使用replace关键字

replace是insert的增强版,可以实现插入的数据和已存在的数据发生主键或者唯一键重复,则删除已存在的数据,再实现插入,如果不重复,则直接插入数据。

结合Mybatis批量处理,用法如下:

<update id="updateSchoolTable" useGeneratedKeys="true" parameterType="java.util.List">
<!-- 存在则更新,不存在则插入 -->
replace into
schoolTable(Id,describeDataForm,childrenID,relevanceID,showType)
values
<foreach collection="list" item="schoolDataForm" separator=",">
(
#{schoolDataForm.Id},
#{schoolDataForm.describeDataForm},
#{schoolDataForm.childrenID},
#{schoolDataForm.relevanceID},
#{schoolDataForm.showType}
)
</foreach>
</update>
方法2:使用ON DUPLICATE KEY UPDATE

该方法能够在主键或者唯一键重复时,修改原记录中某字段的数据。

结合Mybatis批量处理,用法如下:

<update id="updateSchoolTable" useGeneratedKeys="true" parameterType="java.util.List">
insert into
schoolTable(Id,describeDataForm,childrenID,relevanceID,showType)
values
<foreach collection="list" item="schoolDataForm" separator=",">
(
#{schoolDataForm.Id},
#{schoolDataForm.describeDataForm},
#{schoolDataForm.childrenID},
#{schoolDataForm.relevanceID},
#{schoolDataForm.showType}
)
</foreach>

<!--存在即可修改下述字段的数据,注意values()中的内容是数据表中相应的字段名-->
ON DUPLICATE KEY UPDATE
describeDataForm=values(describeDataForm),
childrenID=values(childrenID),
relevanceID=values(relevanceID),
showType=values(showType)
</update>
性能区别:

正如replace底层实现所示,如果主键重复会先删除数据库中原来的记录,插入新纪录。但是数据库删除操作需要维护主键索引,这无疑需要消耗性能。

ON DUPLICATE KET QPDATE只是在主键重复时修改所需字段的值,所以不影响主键。维护成本自然相对于replace低。

注意:在数据量较小时,两者效率大致相同,都很快,但是出现大量数据(百万级别)时,差异就显示出来了。

---------------------

最新文章

  1. InnoDB事务隔离级别
  2. iOS 学习 - 13.微信分享链接、QQ 分享图片
  3. Windows10一周年庆典壁纸
  4. UIButton的状态
  5. Oracle 分析函数 &quot;ORA-30485: 在窗口说明中丢失 ORDER BY 表达式&quot;
  6. 老鸟的Python新手教程
  7. JavaScript中值类型和引用类型的区别
  8. 【算法系列学习】codeforces C. Mike and gcd problem
  9. Sudoku Generator
  10. HTML基础知识(表格、表单)
  11. How to set font and colors of Eclipse UI
  12. 超低质量的超低起点PYQT ------前言
  13. 去除web项目中的css、js缓存
  14. temp--贵州银行
  15. ****** 三十四 ******、软设笔记【存储器系统】-Cache存储器
  16. 51 NOd 1459 迷宫游戏 (最短路径)
  17. C++ 复习要点、面试常见问题总结
  18. SSH原理与运用(一):远程登录(转)
  19. WCF服务安全控制之netTcpBinding的用户名密码验证【转】
  20. java zxing生成二维码

热门文章

  1. vue构造器注册UI组件
  2. jmeter处理接口加密和解密
  3. vscode 在ubuntu的terminal中下划线不显示解决方案
  4. TP 验证码
  5. 推荐一个 Java 里面比较牛逼的公众号!
  6. bfs(标记整个棋盘)
  7. NGUI的widget的使用
  8. NodeJs的CommonJS模块规范
  9. 图解git中的最常用命令
  10. springcloud费话之Eureka服务访问(restTemplate)