为什么我从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;")
答案 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构建 - 不会让人觉得荒谬。