2016-07-04 4 views
0

Я хочу использовать общий шаблон запроса для фильтрации в myBatis-3. Мой шаблон выглядит примерно так:MyBatis Parameter Passing

<sql id="filter"> 
    SELECT * FROM (${subquery}) LIMIT ${page}, 20 
</sql> 

Заполнитель подзапроса может принимать любые запросы. Я попытался передать подзапрос в качестве параметра. Но, к сожалению, это не работает, подзапрос пуст. Интересно, возможно ли, что значение свойства принимает динамическое значение?

<select 
    id="find" 
    parameterType="some.page" 
    resultMap="map"> 
    <include refid="some.namespace.filter"> 
     <property name="subquery" value="${subquery}"/> 
     <property name="page" value="#{page}"/> 
    </include> 
</select> 

<sql id="subquery"> 
    SELECT * FROM test_table ORDER BY id 
</sql> 

ответ

0

Почему бы вам просто не изменить другой способ сделать это? Я не думаю, что функция, о которой вы говорили, поддерживается MyBatis, возможно, вы можете сделать это, как и после;

<select 
    id="find" 
    parameterType="some.page" 
    resultMap="map"> 
    SELECT * FROM (<include refid="subquery">) t LIMIT ${page}, 20 
</select> 

<sql id="subquery"> 
    SELECT * FROM test_table ORDER BY id 
</sql> 
+0

Я знаю, что этот способ может достичь того же результата. Я хотел использовать общий шаблон, потому что я не хочу повторять этот «SELECT * FROM» ($ {subquery}) LIMIT $ {page}, 20' – user3502676

+0

@ user3502676 Имея мои ограниченные знания, 'Mybatis' не поддерживает особенность, о которой вы упоминали; и даже если 'Mybatis' поддерживает это, вам не нужно повторять этот довольно простой запрос' SELECT * FROM ($ {subquery}) LIMIT $ {page}, 20', но вы должны повторить это не слишком короткое inlclude' <свойство name = "page" value = "# {page}" /> ', doesn Не так ли? – Blank