MyBatis具有基于XML的定义中的可重用SQL片段的强大功能,例如:
<mapper namespace="com.company.project.dao.someDao">
<sql id="whereDate">
WHERE date(`time`) BETWEEN #{startDate} AND #{endDate}
</sql>
<sql id="someOtherSqlFragment">
...
</sql>
<select id="getSomeData"
resultType="SomeClass"
parameterType="DateParam" >
SELECT some_column, another_column
</select>
FROM some_table
<include refid="whereDate"/>
<include refid="otherSqlFragment"/>
</select>
</mapper>
有没有一种方法可以在基于注释的查询定义中定义和使用此类片段,或者没有办法针对这种XML进行处理?
最佳答案
如果注释值嵌入在<script>
XML元素中,则可以在注释值中将XML元素用于动态SQL:
@Select("<script>SELECT ...</script>")
但是,使用
<include>
元素将触发SQL Mapper Configuration解析异常,原因是:如果您在
nodeHandlers
类中检查org.apache.ibatis.builder.BuilderException
方法,则会注意到支持的元素是:然后:否,不能在基于注释的查询中包含片段。
关于java - 有没有一种方法可以在基于注释的MyBatis/iBatis中重用SQL片段?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/33129344/