【errors】Mapper method attempted to return null from a method with a primitive return type (int).

问题
严重: Servlet.service() for servlet [dispatcherServlet] in context with path [] threw exception [Request processing failed; nested exception is org.apache.ibatis.binding.BindingException: Mapper method 'com.cxx.mapper.MessageMapper.updateStatus attempted to return null from a method with a primitive return type (int).] with root cause
org.apache.ibatis.binding.BindingException: Mapper method 'com.cxx.mapper.MessageMapper.updateStatus attempted to return null from a method with a primitive return type (int).
... ...

xml 如下:

<!--标记消息已读-->
<select id="updateStatus" parameterType="int">
    update message set status = #{param2} where id = #{param1}
</select>

sql 语句,无误,update 语句返回被更新的行数,无误

解决

我坑我自己
update 语句用什么 select 标签!!!!!!!!!!

你遇到的错误提示: > **"Unable to extract method. Code contains syntax errors. Cannot perform necessary analysis."** 通常出现在 IDE(如 IntelliJ IDEA)中,当你尝试提取方法(Extract Method)时,如果代码存在语法错误或上下文不完整,IDE 就无法安全地进行重构。 结合你之前的代码: ```java CTTbl ctTbls = Optional.ofNullable(xwpfDocument) .map(XWPFDocument::getDocument) .map(CTDocument1::getBody) .map(CTBody::getSdtList) .filter(list -> !list.isEmpty()) .flatMap(sdtList -> Optional.ofNullable(sdtList.get(0))) .map(CTSdtBlock::getSdtContent) .map(CTSdtContentBlock::getTblList) .filter(tblList -> !tblList.isEmpty()).stream().findFirst().orElse(null); ``` 我们已经指出:`.stream().findFirst()` 是误用。但更重要的是——**这个表达式整体作为语句可能没有正确闭合**,或者缺少分号、类型导入、变量定义等,导致整个 Java 文件存在语法错误,从而让 IDE 拒绝执行“提取方法”操作。 --- ### ✅ 正确且可编译的 Java 代码(修复版) 下面是一个完整的、语法正确的工具方法,你可以直接复制到你的类中使用: ```java import java.util.Optional; import org.apache.poi.xwpf.usermodel.XWPFDocument; import org.openxmlformats.schemas.wordprocessingml.x2006.main.CTBody; import org.openxmlformats.schemas.wordprocessingml.x2006.main.CTDocument1; import org.openxmlformats.schemas.wordprocessingml.x2006.main.CTSdtBlock; import org.openxmlformats.schemas.wordprocessingml.x2006.main.CTSdtContentBlock; import org.openxmlformats.schemas.wordprocessingml.x2006.main.CTTbl; public class DocumentUtil { public static Optional<CTTbl> getFirstTableFromFirstSdt(XWPFDocument xwpfDocument) { return Optional.ofNullable(xwpfDocument) .map(XWPFDocument::getDocument) .map(CTDocument1::getBody) .map(CTBody::getSdtList) .filter(sdtList -> sdtList != null && !sdtList.isEmpty()) .flatMap(sdtList -> Optional.ofNullable(sdtList.get(0))) .map(CTSdtBlock::getSdtContent) .map(CTSdtContentBlock::getTblList) .filter(tblList -> tblList != null && !tblList.isEmpty()) .flatMap(tblList -> Optional.ofNullable(tblList.get(0))); } } ``` 然后在你的业务代码中调用: ```java Optional<CTTbl> result = DocumentUtil.getFirstTableFromFirstSdt(xwpfDocument); CTTbl ctTbl = result.orElse(null); // 如果必须返回 null ``` --- ### 🔍 错误原因解释 | 原因 | 说明 | |------|------| | ❌ `.stream().findFirst()` 误用 | `Optional<List<T>>.stream()` 返回的是 `Stream<List<T>>`,`.findFirst()` 得到的是 `Optional<List<T>>`,不是 `Optional<T>` | | ❌ 缺少必要的 import | 如果 `CTDocument1`, `CTBody` 等类未导入,Java 编译器会报错 | | ❌ 表达式未正确结束 | 比如缺少分号,或链式调用中间断开 | | ❌ 在非法上下文中尝试提取方法 | 比如你在注释里、字符串里、或有语法错误的地方右键“提取方法” | --- ### ✅ 解决方案步骤 1. **确保所有类都有正确导入**(IntelliJ: `Alt + Enter` 自动导入) 2. **修复语法错误**:特别是 `.stream().findFirst()` 这种错误链式调用 3. **将逻辑封装成独立方法**(如上面的 `getFirstTableFromFirstSdt`) 4. **再尝试使用“Extract Method”功能** —— 现在应该可以正常工作了 ---
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值