Динамический запрос на основе значения столбца в операторе выбора Ibatis? - PullRequest
0 голосов
/ 18 июля 2011

Мне нужно иметь отображение наследования в ibatis. Из документации Ibatis я узнал, что мы можем сравнить значение столбца для вызова подкарт в теге дискриминатора resultMap следующим образом:

<resultMap id="map">
<discriminator javaType="java.lang.Integer" column="type">
<subMap resultMap="submap1" value="1" />
<subMap resultMap="submap2" value="2"/>
<subMap resultMap="submap3" value="3"/>
</discriminator>
</resultMap>

В приведенной выше карте результатов вложенные карты отображают столбцы на другой объект.

Но я хочу сравнить значение столбца в самом операторе select, чтобы получить необходимые столбцы. кое-что вроде как:

<select id="load" resultMap="map">
select mt.id,mt.name, mt.type
<here we have to check the value of type column returned dynamically>
<if type = "1">
table1.column1, table1.column2 ... table1.columnN 
</if>
<if type = "2">
table2.column1, table2.column2 ... table2.columnN 
</if>
</here>
from main_table mt
LEFT OUTER JOIN TABLE1 table1 ON mt.id=table1
LEFT OUTER JOIN TABLE2 table2 ON mt.id=table2
where mt.id=#value#
</select>

Это всего лишь алгоритм для моего требования. Возможно ли это на Ибатисе?

Надеюсь, вы понимаете мою проблему. Если вопрос неясен, я с радостью отредактирую это, чтобы вы поняли.

Заранее спасибо.

1 Ответ

2 голосов
/ 11 января 2012

Вы можете попробовать следующим образом?

<select id="load" resultMap="map">
     select mt.id,mt.name, mt.type
     <if type = "1">
         table1.column1, table1.column2 ... table1.columnN 
     </if>
     <if type = "2">
         table2.column1, table2.column2 ... table2.columnN 
     </if>
     from main_table mt
     <if type = "1">
         LEFT OUTER JOIN TABLE1 table1 ON mt.id=table1
     </if>
     <if type = "2">
         LEFT OUTER JOIN TABLE2 table2 ON mt.id=table2
     </if>
     where mt.id=#{value}
</select>

Если вы столкнулись с какой-либо ошибкой выше, пожалуйста, ответьте ...

...