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方法,则会注意到支持的元素是:
  • 修剪
  • 其中
  • 设置
  • foreach
  • 如果
  • 选择
  • 否则
  • 绑定(bind)

  • 然后:否,不能在基于注释的查询中包含片段。

    关于java - 有没有一种方法可以在基于注释的MyBatis/iBatis中重用SQL片段?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/33129344/

    10-09 13:23