Mybatis save、saveOrUpdate、update的区别

news2024/10/24 22:22:53

哈喽,大家好,我是木头左!

1. save方法

Mybatis的save方法用于插入一条新的记录。当数据库中不存在相同的记录时,会执行插入操作;如果已经存在相同的记录,则会抛出异常。

int result = sqlSession.insert("userMapper.save", user);

2. saveOrUpdate方法

Mybatis的saveOrUpdate方法用于插入或更新一条记录。当数据库中不存在相同的记录时,会执行插入操作;如果已经存在相同的记录,则会执行更新操作。

int result = sqlSession.insert("userMapper.saveOrUpdate", user);

3. update方法

Mybatis的update方法用于更新一条记录。当数据库中存在相同的记录时,会执行更新操作;如果不存在相同的记录,则不会执行任何操作。

int result = sqlSession.update("userMapper.update", user);

4. 区别总结

  • save方法只适用于插入操作,如果数据库中已经存在相同的记录,会抛出异常。
  • saveOrUpdate方法既可以用于插入操作,也可以用于更新操作,当数据库中不存在相同的记录时,会执行插入操作;如果已经存在相同的记录,则会执行更新操作。
  • update方法只适用于更新操作,如果数据库中不存在相同的记录,则不会执行任何操作。

通过以上介绍,可以看到save、saveOrUpdate和update方法在Mybatis中的不同作用。在实际开发中,需要根据业务需求选择合适的方法来执行相应的操作。同时,也可以通过设置主键策略来避免重复数据的问题,从而更好地使用Mybatis的这些方法。

5. 主键策略设置

5.1 自增主键

当使用自增主键时,可以保证每条记录的主键都是唯一的,因此可以直接使用save或saveOrUpdate方法进行插入或更新操作。例如:

<insert id="insertUser" parameterType="com.example.User">
    INSERT INTO user (id, name, age) VALUES (#{id}, #{name}, #{age})
</insert>

5.2 非自增主键

当使用非自增主键时,需要确保数据库中没有重复的主键值,否则会抛出异常。此时,可以使用以下两种方法来处理:

  • 先查询再判断:在执行插入或更新操作之前,先查询数据库中是否存在相同的主键值。如果存在,则不执行操作;如果不存在,则执行插入或更新操作。这种方法的缺点是可能会影响性能,因为需要多次查询数据库。例如:
User user = getUserById(id);
if (user == null) {
    user = new User();
    user.setId(id);
    user.setName(name);
    user.setAge(age);
    sqlSession.insert("userMapper.insert", user);
} else {
    sqlSession.update("userMapper.update", user);
}
  • 使用主键策略:在Mybatis的配置文件中设置主键策略为“NOT_NULL”,这样当数据库中不存在相同的主键值时,会自动生成一个新的主键值并执行插入或更新操作;如果已经存在相同的主键值,则会抛出异常。这种方法的优点是简单方便,但缺点是无法自定义主键生成逻辑。例如:
<insert id="insertUser" parameterType="com.example.User">
    INSERT INTO user (id, name, age) VALUES (#{id,jdbcType=INTEGER}, #{name}, #{age}) ON CONFLICT DO NOTHING;
</insert>

通过以上介绍,可以看到Mybatis save、saveOrUpdate和update方法在不同主键策略下的使用方法。在实际开发中,需要根据业务需求选择合适的方法来执行相应的操作,并根据主键策略来避免重复数据的问题。同时,也可以通过设置事务管理来确保数据的一致性和完整性,从而提高系统的可靠性和稳定性。

我是木头左,感谢各位童鞋的点赞、收藏,我们下期更精彩!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1842704.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

SAP 接口-联行号主数据维护接口【MDM->SAP】开发说明书(包括测试样例、程序代码仅作参考,不保证一定可以运行)

接口映射字段 开发通用说明 根据接口传输字段【MDMWHLX 维护类型】=0则调用联行号创建【BAPI_BANK_CREATE】【前台事务码FI01】对联行号进行创建; 根据接口传输字段【MDMWHLX 维护类型】=1时则调用联行号修改【BAPI_BANK_CREATE】【前台事务码FI02】对联行号进行修改; 开发…

易优CMS网站如何打包备份(搬家教程)

易优CMS网站如何打包备份(搬家教程) 1. 搬家前备份数据库 2.删除install_********目录下的install.lock文件 3.再改名install_1540256968 为install 4.删除data untime所有文件夹 5.打包根目录下所有文件&#xff0c;上传空间解压即可安装 注&#xff1a;安装后直接进入后台…

视频二维码怎么设置全屏播放?默认全屏效果的添加技巧

视频做成二维码如何全屏展示呢&#xff1f;现在很多人都会将视频生成二维码后&#xff0c;分享二维码给其他人来扫码查看视频内容&#xff0c;设置视频默认全屏播放可以带来展示更好的效果&#xff0c;那么横版和竖版视频扫码自动全屏播放是如何生成的呢&#xff1f; 视频二维…

嵌入式开发者转战AI大模型,是机遇还是挑战?

前言 在当今日新月异的科技浪潮中&#xff0c;人工智能&#xff08;AI&#xff09;大模型无疑是技术前沿的明星领域&#xff0c;它们以其卓越的性能和广泛的应用前景&#xff0c;吸引了全球范围内的关注。对于嵌入式开发者而言&#xff0c;从熟悉的硬件嵌入式领域转战AI大模型…

【专利】一种光伏加工产品缺陷检测方法

申请号CN202410053862.4公开号&#xff08;公开&#xff09;CN118037635A申请日2024.01.12申请人&#xff08;公开&#xff09;超音速人工智能科技股份有限公司发明人&#xff08;公开&#xff09;张俊峰(总); 叶长春(总); 许春夏 摘要 本发明公开一种光伏加工产品缺陷检测方…

今天碰到一个gitee的严重问题

今天碰到一个gitee的严重问题 今天访问gitee的官网&#xff0c;无法访问… 代码无法提交 接下来 接下来 gitee的客服给我说 不知道哪天会不会代码直接没了 不知道哪天会不会代码直接没了

高效电商数据分析:电商爬虫API与大数据技术的融合应用

一、引言 随着电子商务的迅猛发展和数据量的爆炸式增长&#xff0c;电商数据分析已成为企业决策的关键依据。在竞争激烈的电商市场中&#xff0c;如何高效、准确地获取并分析数据&#xff0c;以洞察市场趋势、优化运营策略、提升用户体验&#xff0c;成为电商企业面临的重要挑…

【机器学习】Transformer框架理论详解和代码实现

1. 引言 1.1.讨论背景 在本文中&#xff0c;我们将深入探讨近两年最具影响力的架构之一&#xff1a;Transformer模型。自从2017年Vaswani等人发表划时代论文《Attention Is All You Need》以来&#xff0c;Transformer架构便在众多领域&#xff0c;尤其是自然语言处理&#x…

中欧科学家论坛暨第六届人工智能与先进制造国际会议(AIAM2024)

会议日期&#xff1a;2024年10月20-21日 会议地点&#xff1a;德国-法兰克福 会议官网&#xff1a;https://www.iaast.cn/meet/home/Bx130JiM 出版检索&#xff1a;EI、Scopus等数据库收录 【会议简介】 “中欧科学家论坛”由德国、法国、荷兰、瑞士、丹麦、意大利、西班牙…

golang去掉前后空格

str : " ce s "str strings.TrimSpace(str)fmt.Printf("--%v--", str)

新起之星——零信任沙箱

零信任沙箱作为一种新兴的安全防护技术&#xff0c;近年来在多个领域得到了广泛应用。特别是在网络安全、数据安全以及企业数字化转型等领域&#xff0c;零信任沙箱以其独特的优势和特点&#xff0c;受到了众多企业和机构的青睐。 在网络安全领域&#xff0c;零信任沙箱的应用尤…

深入浅出Git原理与Gitflow流程

1 Git原理 版本控制系统在软件开发和团队协作中扮演着至关重要的角色。它们帮助开发人员跟踪和管理代码的变化&#xff0c;协调多人同时编辑同一代码库&#xff0c;回溯历史版本&#xff0c;并解决代码冲突等问题。Git作为当今最流行的分布式版本控制系统&#xff0c;为开发人…

10W+人都在看的年度技术精选、游戏行业安全、私域、AI实践指南报告整合,码住!

在网易工作了十多年&#xff0c;不说别的&#xff0c;小智在这里光学习就学习到很多干货&#xff0c;今天将这些干货内容统一分享给同仁&#xff01;真的是集齐精华&#xff0c;大家先点赞收藏关注&#x1f44d; 往年&#xff0c;基于网易数智在娱乐社交、游戏、泛零售、政务、…

labelme标注的json、coco格式快速转yolo格式

标注的json {"version": "5.2.1","flags": {},"shapes": [{"label": "person","points": [[239.85401459854015,78.8321167883212],[334.014598540146,343.79562043795625]],"group_id": nu…

wsl2平台鸿蒙全仓docker编译环境快速创建方法

文章目录 1 文章适用范围&#xff1a;2 WSL环境安装3 镜像迁移非C盘4 Docker环境准备4.1 docker用户组和用户创建4.2 Docker环境配置4.2.1 Ubuntu下安装docker工具4.2.2 鸿蒙Docker环境安装4.2.3 鸿蒙全仓代码拉取编译 5 鸿蒙全仓代码的更新策略6 参考文献7 FAQ7.1 缺头文件xcr…

uniapp scroll-view 虚拟滚动【适合每条数据高度一致】

基本原理 有一万条数据&#xff0c;我们按10条一页来进行分组&#xff0c;会有1000页页面滚动到第10页的位置的时候&#xff0c;10页之后和10页之前是不用被显示的&#xff0c;可以直接隐藏掉如果是数据删除&#xff0c;页面会不流畅&#xff0c;会卡顿一下&#xff0c;且滚动位…

Linux守护进程简介、创建流程、关闭和实例演示

1、什么是守护进程&#xff1f; 守护进程是一个后台运行的进程&#xff0c;是随着系统的启动而启动&#xff0c;随着系统的终止而终止&#xff0c;类似于windows上的各种服务&#xff0c;比如ubuntu上的ssh服务&#xff0c;网络管理服务等都是守护进程。 2、守护进程的创建流…

代理模式(静态代理/动态代理)

代理模式&#xff08;Proxy Pattern&#xff09; 一 定义 为其他对象提供一种代理&#xff0c;以控制对这个对象的访问。 代理对象在客户端和目标对象之间起到了中介作用&#xff0c;起到保护或增强目标对象的作用。 属于结构型设计模式。 代理模式分为静态代理和动态代理。…

华为Pocket 2,夏日达人的时尚新宠!

夏天炎炎&#xff0c;适合撒欢~但时尚与便利从不缺席&#xff01;我的时尚新宠华为Pocket 2跟我一起。 高颜值的外观一定是出行拍照和搭配单品的选项&#xff0c;这款小巧精致的手机&#xff0c;外屏设计超级时尚,轻松搭配出夏日潮流风。它的外屏还支持个性化设置&#xff0c;…

OpenVINO™ 2024.2 发布--推出LLM专属API !服务持续增强,提升AI生成新境界

点击蓝字 关注我们,让开发变得更有趣 作者 | 武卓 博士 排版 | 李擎 Hello&#xff0c; OpenVINO™ 2024.2 对我们来说&#xff0c;这是非常忙碌的几周&#xff0c;因为我们正在努力根据您的反馈改进我们的产品特性&#xff0c;并扩展生态系统以涵盖其它场景和用例。 让我们看看…