MyBatis错误:引起:java.sql.SQLSyntaxErrorException:意外令牌:<要求:(

时间:2015-01-03 04:59:27

标签: mybatis

为什么我从MyBatis 3收到此错误?

  

引起:java.sql.SQLSyntaxErrorException:意外令牌:<要求:(

这是我的SQL:

SELECT * FROM GC0101.AGENT_POOL_CLIENT_ASSIGNMENT WHERE GO_CD = ? 
AND ASSIGNMENT_STATUS_CD IN %lt;foreach item="item" index="index" 
collection="assignmentStatusCd" open="(" separator="," close=")"%gt; 
? %lt;/foreach%gt;

根据此查询创建:

@Select("SELECT * FROM GC0101.AGENT_POOL_CLIENT_ASSIGNMENT WHERE GO_CD = 
#{generalOfficeCd, jdbcType=CHAR} AND ASSIGNMENT_STATUS_CD IN " +
"<foreach item=\"item\" index=\"index\" collection=\"assignmentStatusCd\" 
open=\"(\" separator=\",\" close=\")\"%gt; #{item, jdbcType=CHAR} %lt;/foreach%gt;") 

1 个答案:

答案 0 :(得分:0)

如果这确实是你的注释值,那么它将无法工作,因为你试图在注释的唯一值中包含一个XML语句,该值不是为XML元素解析的,它是“原样”。

您可以在这篇文章中找到一个可能的解决方案:How to use Annotations with iBatis (myBatis) for an IN query?(请参阅LordOfThePigs答案中的@Select("<script>...")示例 - 使用最新的MyBatis版本)或尝试使用@SelectProvider注释。见the Mybatis 3 API docs for more details and this note as an advice

  

不幸的是,Java注释的表现力和灵活性受到限制。尽管在调查,设计和试验上花费了大量时间,但最强大的MyBatis映射根本无法使用Annotations构建 - 不会让人觉得荒谬。