1. MyBatis开发中的两个深坑解析
作为一名常年与MyBatis打交道的Java开发者,我遇到过不少让人抓狂的Bug。今天要分享的两个案例特别典型——它们都具备"代码看起来完全正确,但运行时就是报错"的特征。第一个坑与Arrays.asList()方法有关,第二个则是MyBatis中数值0的神秘消失问题。通过这两个案例,我想带大家深入理解MyBatis底层的工作原理,以及如何避免这些陷阱。
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. 坑位一:Arrays.asList()遇上老版本MyBatis
2.1 问题现象与背景
那是一个周五的下午(似乎重大Bug总喜欢在周末前出现),测试环境突然抛出异常:
code复制org.mybatis.spring.MyBatisSystemException: nested exception is org.apache.ibatis.builder.BuilderException: Error evaluating expression 'userCode.size() > 0'. Cause: org.apache.ibatis.ognl.MethodFailedException: Method "size" failed for object [aaa, bbb] [java.lang.IllegalAccessException: Class org.apache.ibatis.ognl.OgnlRuntime can not access a member of class java.util.Collections$UnmodifiableCollection with modifiers "public"]
表面上看,这只是一个普通的size()方法调用失败,但问题远没有这么简单。出问题的代码片段如下:
java复制// Controller层
List<String> userCodes = Arrays.asList("aaa", "bbb", "ccc");
orderService.fetchOrderByUserCodes(userCodes);
对应的Mapper XML:
xml复制SELECT * FROM t_order
WHERE 1=1
<if test="u
