当前位置: 首页 > article >正文

MyBatis执行完sql后,返回的数值代表的意思

在 MyBatis 中,常见的数据库操作方法返回的数值(如 insertupdatedelete)代表了 受影响的行数,即数据库操作成功后,实际修改(插入、更新或删除)的记录数量。每个方法返回的数值有不同的含义,具体如下:

1. insert(插入操作)

返回值:插入的记录数

  • 返回 1:表示成功插入了一条记录。
  • 返回 0:理论上,insert 方法不应返回 0,因为插入操作要么成功插入一条记录,要么因为某些错误(如违反唯一约束)导致插入失败。如果返回 0,通常表示插入失败。
示例:
@Insert("INSERT INTO user (name, age) VALUES (#{name}, #{age})")
int insertUser(User user);

调用返回 1 表示成功插入了一条记录。

2. update(更新操作)

返回值:更新的记录数

  • 返回 1:表示成功更新了 1 条记录。
  • 返回 0:表示没有记录被更新。常见的原因包括:
    • 传入的条件没有匹配的记录。
    • 更新的数据与数据库中的数据一致,导致没有实际变化。
    • 由于其他原因(如并发控制等)未能更新任何记录。
示例:
@Update("UPDATE user SET name = #{name}, age = #{age} WHERE id = #{id}")
int updateUser(User user);

调用返回 1 表示成功更新了一条记录,返回 0 表示没有记录被更新。

3. delete(删除操作)

返回值:删除的记录数

  • 返回 1:表示成功删除了 1 条记录。
  • 返回 0:表示没有记录被删除。可能的原因包括:
    • 删除条件没有匹配的记录。
    • 由于外键约束等原因,无法删除记录(虽然不常见,依赖于数据库的配置)。
示例:
@Delete("DELETE FROM user WHERE id = #{id}")
int deleteUser(Long id);

调用返回 1 表示成功删除了一条记录,返回 0 表示没有记录被删除。

4. select(查询操作)

对于查询操作,返回值的解释略有不同,因为 select 查询的是数据,而不是更新或删除数据。返回值通常是 结果集的数量或数据对象

  • 返回 null 或空集合:表示没有找到符合条件的记录。
  • 返回非空集合或对象:表示查询到数据,通常是一个 List 或单个对象,具体取决于查询语句。
示例:
@Select("SELECT * FROM user WHERE id = #{id}")
User selectUserById(Long id);
  • 如果找到了用户记录,返回 User 对象。
  • 如果没有找到,返回 null

5. batch(批量操作)

对于批量操作,如批量插入、批量更新、批量删除等,返回值通常是操作影响的记录总数。

  • 返回值:表示批量操作成功影响的行数。
    • 比如,如果你批量插入了 5 条记录,返回值应该是 5。
示例:
@Insert({
    "<script>",
    "INSERT INTO user (name, age) VALUES ",
    "<foreach collection='users' item='user' separator=','>",
    "(#{user.name}, #{user.age})",
    "</foreach>",
    "</script>"
})
int insertBatch(List<User> users);

如果 users 列表中有 3 个用户被成功插入,那么返回值应该是 3

总结:

  1. insert 方法返回:插入的记录数(通常为 1,表示成功插入一条记录)。
  2. update 方法返回:更新的记录数(通常为 1,表示成功更新一条记录;0 表示没有更新记录)。
  3. delete 方法返回:删除的记录数(通常为 1,表示成功删除一条记录;0 表示没有删除记录)。
  4. select 方法返回:查询到的记录或对象(null 或空集合表示没有找到数据)。

返回值通常用于判断数据库操作是否成功,以及对操作结果进行进一步的处理或日志记录


http://www.kler.cn/a/450003.html

相关文章:

  • Datawhale AI 冬令营学习笔记-零编程基础制作井字棋小游戏
  • Linux -- 线程的优点、pthread 线程库
  • 【087】基于51单片机智能宠物喂食器【Proteus仿真+Keil程序+报告+原理图】
  • HTML基础学习(1)
  • C++---------随机库,standfor库
  • 2.6 网络面试问题
  • 基于PX4的多无人机集群中的的配置
  • 【软考高级】系统架构设计师复习笔记-精华版
  • 【C语言】判断回文
  • #error: WinSock.h has already been included解决方案
  • 解决PotPlayer无法播放S/W HEVC(H265)解码的视频
  • JVM 常用的参数说明与配置指南
  • 信管通低代码信息管理系统应用平台
  • Kafka 常见问题
  • Vue 前端代码规范
  • 游戏网站大全
  • 2.4 网络概念(分层、TCP)
  • 探索 Python编程 调试案例:配置日志记录器查看程序运行bug
  • jvm接入prometheus监控
  • vsCode 的 setting.json 配置
  • opencv中的各种滤波器简介
  • Day13 用Excel表体验梯度下降法
  • 【JavaEE进阶】初始Spring Web MVC
  • oracle 加字段和字段注释 sql
  • 深度学习中的注意力机制:解锁智能模型的新视角
  • C++的STL_swap trick和现代C++的方法