myBatis 语句中出现 Attribute "resultType" must be declared for element type "update"

本文探讨了MyBatis框架中update操作的返回值机制,解析其如何通过JDBC返回受影响行数,以及在Controller层正确接收这些返回值的方法。

mapper层

a28ea841234180bf38f73a1fd37fe08de94.jpg

在mybatis中 insert和update是不用加返回值类型的,直接在controller层调用方法那加个加收返回的变量就能拿到了(下图225行)

controller层  ↓

992c3f2aac860aa0e48d6bfff48e7f8a2f8.jpg

 

之前在百度上搜索了一下,说mybatis是没有返回值的,其实是有返回值,但是这个返回值应该不是直接返回受影响的行数而是jdbc受影响的行数,所以mybatis返回的应该从JDBC那的是一个记录行数,(百度了另一解释:

默认情况下,mybatis 的 update 操作返回值是记录的 matched 的条数,并不是影响的记录条数。

严格意义上来将,这并不是 mybatis 的返回值,mybatis 仅仅只是返回的数据库连接驱动(通常是 JDBC )的返回值,也就是说,如果驱动告知更新 2 条记录受影响,那么我们将得到 mybatis 的返回值就会是 2 和 mybatis 本身是没有关系的

转载于:https://my.oschina.net/javaWithMe/blog/2872584

这个错误是 MyBatis 在解析 XML 映射文件时抛出的 XML 格式校验异常,具体错误信息如下: ``` Caused by: org.xml.sax.SAXParseException: Attribute "resultType" must be declared for element type "update". ``` --- ### ❓错误含义: 该错误表示你在一个 `<update>` 标签中错误地使用了 `resultType` 属性,而根据 MyBatisXML DTD(文档类型定义),`<update>` 标签是**不允许有 `resultType` 属性**的。 --- ### ✅ 正确使用方式: 在 MyBatis 中: - `<select>` 标签可以使用 `resultType` 或 `resultMap` 来指定返回值类型。 - `<insert>`、`<update>`、`<delete>` 这些标签**不能**使用 `resultType` 或 `resultMap`,因为它们通常返回的是受影响的行数(`int` 类型)。 --- ### ❌ 错误示例: ```xml <update id="updateUser" resultType="com.example.User"> UPDATE users SET name = #{name} WHERE id = #{id} </update> ``` 上面的 `resultType` 是多余的,MyBatis 不允许在 `<update>` 中使用。 --- ### ✅ 正确写法: ```xml <update id="updateUser"> UPDATE users SET name = #{name} WHERE id = #{id} </update> ``` 如果你需要获取更新后的数据,可以通过以下方式实现: 1. **在 Java Mapper 接口中先更新后查询:** ```java @Update("UPDATE users SET name = #{name} WHERE id = #{id}") void updateUser(User user); @Select("SELECT * FROM users WHERE id = #{id}") User getUserById(Long id); ``` 2. **使用 `<select>` 查询更新后的数据。** --- ### 🧪 补充说明: - 如果你确实需要返回更新后的结果,可以考虑使用 `<select>` + `<update>` 的组合。 - MyBatis 默认对于 `update` 操作返回的是受影响的行数(`int`),Spring 会自动处理这个返回值。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值