例如
int insertUser
int updateUser
int deleteUser
我试过了,如果这些操作失败,例如insertUser时ID重复,会直接抛异常的,根本不会返回0.所以这里的int还有必要吗?
例如
int insertUser
int updateUser
int deleteUser
我试过了,如果这些操作失败,例如insertUser时ID重复,会直接抛异常的,根本不会返回0.所以这里的int还有必要吗?
是的,MyBatis的DAO层接口方法通常需要设置明确的返回值类型,即使这些操作(如insert
、update
、delete
)在大多数数据库操作库中通常返回受影响的行数。
在MyBatis中,对于insert
、update
、delete
操作,返回值通常是一个整数(int
),表示受影响的行数。这个返回值对于判断操作是否成功执行非常有用。例如,如果你尝试插入一个用户,但是由于ID重复导致插入失败,理论上数据库操作应该返回0(表示没有行被影响),而不是直接抛出异常。然而,是否抛出异常还取决于你的MyBatis配置和数据库的行为。
因此,即使你的操作可能会因为某些原因失败,并且MyBatis可能会抛出异常,设置明确的返回值类型(如int
)仍然是有必要的。这样,你可以通过返回值来判断操作是否成功执行了预期的数据库更改。
public interface UserMapper {
int insertUser(User user); // 返回插入的行数
int updateUser(User user); // 返回更新的行数
int deleteUser(int userId); // 返回删除的行数
}
在调用这些方法时,你可以检查返回值来确认操作是否按预期执行。如果返回值与预期不符(例如,insert
操作返回了0),你可以根据应用的需要进行相应的错误处理。
3 回答7k 阅读✓ 已解决
1 回答1.3k 阅读✓ 已解决
1 回答1.5k 阅读
756 阅读
653 阅读
对于
<insert></insert>
标签来说,返回的int值一般这么几个范围,这是sql规范,与MyBatis无关>0
新增的行数,尤其是批量新增时0
表示未命中,无操作,例如INSERT INTO table_name (column1, column2) VALUES (value1, value2) ON DUPLICATE KEY UPDATE column1 = column1;
未新增未更新,未命中<0
取决于JDBC驱动具体实现,一般-1
是唯一性约束<update></update>
还有<delete></delete>
类似至于你说的报错,那是因为JDBC侧,将异常往上抛了,被MyBatis包装了,实际返回值还是有的,你如果单纯从MyBatis侧讨论,除了
update
和delete
时的是否命中有点用,其他基本没用,但是在sql层面,写SQL脚本,存储过程,这些返回值都有有很大作用的