转载自 mybatis 注解引发的bug,org.apache.ibatis.builder.BuilderException: Could not find value method on SQL anno
Mybatis用注解开发且还用script标签
这种bug,网上一搜一大堆,但是都xml方式开发,大部分说的是返回类型或者入参类型对不上,而我是注解式开发。
先贴写出来的sql:
@Select({"<script>"," select * "," from table t"," AND f.created_at >= to_date(#{paramMap.startDate}, 'yyyyMMddhh24miss')"," AND f.created_at <= to_date(#{paramMap.endDate}, 'yyyyMMddhh24miss')","</script>"
})
解决方法:把上面 的 < 换成转义字符 < 就有ok了。
主要的表跟字段还有没有出错的where条件我已经简写了。这种注解式开发,如果加上script标签,代表该条sql以xml解析的方式解析映射,xml解析方式大家应该都知道,< 或者 > 应该都用转义字符,但是这里看起来是个String没在意,导致这个bug。最坑的不是这个,而且pom文件里的mybatis相关的jar包的版本也有点问题,在启动的时候不会报错,能启动成功,但是在你services调用dao层的时候就会报这个错。后来我把mybatis相关的jar版本指定了一个,在启动的时候就会报错,启动不成功,报的错误就是你那个dao文件解析失败,就是这个错误:
org.apache.ibatis.builder.BuilderException: Could not find value method on SQL annotation. Cause: org.apache.ibatis.builder.BuilderException: Error creating document instance. Cause: org.xml.sax.SAXParseException; lineNumber: 1; columnNumber: 1807; The content of elements must consist of well-formed character data or markup.