在 MyBatis 中,常见的数据库操作方法返回的数值(如 insert
、update
和 delete
)代表了 受影响的行数,即数据库操作成功后,实际修改(插入、更新或删除)的记录数量。每个方法返回的数值有不同的含义,具体如下:
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
。
总结:
insert
方法返回:插入的记录数(通常为1
,表示成功插入一条记录)。update
方法返回:更新的记录数(通常为1
,表示成功更新一条记录;0
表示没有更新记录)。delete
方法返回:删除的记录数(通常为1
,表示成功删除一条记录;0
表示没有删除记录)。select
方法返回:查询到的记录或对象(null
或空集合表示没有找到数据)。
返回值通常用于判断数据库操作是否成功,以及对操作结果进行进一步的处理或日志记录