2015-10-14 147 views
3

MyBatis有的基于XML的定义可重复使用的SQL片段,比如这个强大的功能:有没有办法在基于注解的MyBatis/iBatis中重用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?

回答

0

您可以在注释值动态SQL XML元素,如果被嵌入<script> XML元素:

@Select("<script>SELECT ...</script>") 

但使用<include>元素将引发SQL映射配置解析异常,引起:

org.apache.ibatis.builder.BuilderException:SQL语句中的未知元素 。在 org.apache.ibatis.scripting.xmltags.XMLScriptBuilder.parseDynamicTags

如果检查nodeHandlers方法org.apache.ibatis.builder.BuilderException类,你会注意到支持的元素是:

  • 修剪
  • 哪里
  • 设置
  • 的foreach
  • 如果
  • 选择
  • 否则
  • 绑定

然后:NO,包括在基于注释的查询片段是不可能的。