MyBatis之insert(插入和更新)
近来在改造一个同事的数据入库项目,发现了一些问题,其中就因为数据库联合主键的缘故导入新增的数据不能入库(这个新增的入库数据,其实对应的数据表就存在这样的数据,她那边没有针对此进行判断有则更新,仅仅是无则插入)。
基于这个问题,我不想写太多的代码(查这条数据是否存在,存在则更新这样的),只想用最少的代码量解决这个问题,通过搜索我找到了这样的方法,无需写很多代码,就是一条SQL就能搞定。
1.针对单条插入或更新而言,SQL可以这样写(对应的XML里面的SQL)
以我博客为例:
INSERT INTO `wp_users` ( `ID`, `user_login`, `user_pass`, `user_nicename`, `user_email`, `user_url`, `user_registered`, `user_activation_key`, `user_status` `display_name` ) VALUES ( #{ID}, #{user_login}, #{user_pass}, #{user_nicename}, #{user_email}, #{user_url}, #{user_registered}, #{user_activation_key}, #{user_status}, #{display_name} ) ON DUPLICATE KEY UPDATE ID = VALUES(ID), user_login = VALUES(user_login), user_pass = VALUES(user_pass), user_nicename = VALUES (user_nicename), user_email = VALUES (user_email), user_url = VALUES (user_url), user_registered = VALUES (user_registered), user_activation_key = VALUES (user_activation_key), user_status = VALUES (user_status), display_name = VALUES (display_name)
2.针对批量插入或更新而言可以这么写(对应的XML里面的SQL)
以我博客为例:
INSERT INTO `wp_users` ( `ID`, `user_login`, `user_pass`, `user_nicename`, `user_email`, `user_url`, `user_registered`, `user_activation_key`, `user_status` `display_name` ) VALUES <foreach collection="list" item="item" index="index" separator=","> ( #{item.ID}, #{item.user_login}, #{item.user_pass}, #{item.user_nicename}, #{item.user_email}, #{item.user_url}, #{item.user_registered}, #{item.user_activation_key}, #{item.user_status}, #{item.display_name} ) </foreach> ON DUPLICATE KEY UPDATE ID = VALUES(ID), user_login = VALUES(user_login), user_pass = VALUES(user_pass), user_nicename = VALUES (user_nicename), user_email = VALUES (user_email), user_url = VALUES (user_url), user_registered = VALUES (user_registered), user_activation_key = VALUES (user_activation_key), user_status = VALUES (user_status), display_name = VALUES (display_name)
参考资料如下:
mybatis对mysql进行插入或者更新(含批量)
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 分享 3 个 .NET 开源的文件压缩处理库,助力快速实现文件压缩解压功能!
· Ollama——大语言模型本地部署的极速利器
· [AI/GPT/综述] AI Agent的设计模式综述
2018-04-05 MyBatis之反射技术+JDK动态代理+cglib代理
2018-04-05 MyBatis之动态sql