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>
有没有办法在基于注释的查询定义中定义和使用这些片段,还是没有办法解决这个问题?
答案 0 :(得分:1)
如果注释值嵌入<script>
XML元素中,则可以在XML元素中使用XML元素:
@Select("<script>SELECT ...</script>")
但是使用<include>
元素将触发SQL Mapper配置解析异常,原因是:
org.apache.ibatis.builder.BuilderException:未知元素 在SQL语句中。在 org.apache.ibatis.scripting.xmltags.XMLScriptBuilder.parseDynamicTags
如果您查看课程nodeHandlers
中的org.apache.ibatis.builder.BuilderException
方法,您会注意到支持的元素是:
然后:NO,包括基于注释的查询中的片段是不可能的。