从单个ibatis查询返回多个类型

时间:2014-02-18 20:43:24

标签: java mysql ibatis

我有一个搜索表单,需要包含两个不同表格的结果。这些表彼此没有关系,我们是分开的。在我的示例场景中,我们有加油站和杂货店。杂货店表可能具有freezerSize,produceStorage,numberOfCarts等属性。加油站表可能有gasTankSizeInGallons,windowCleanerInGallons等....两个表之间有一些共享字段(即 - numberOfEmployees,squareFeetOfStoreSpace,numberOfShelves等...)。

我的搜索查询需要一起排序和显示加油站和杂货店。我正在考虑使用SQL联合并将不适用的字段设置为0或null。但是,我真的很难知道如何使用ibatis(因为两个对象的类型不同):

<select id="searchQuery" parameterClass="java.util.Map" resultClass="????????????????">
    SELECT
        storeName, storeCity, storeState, numberOfCarts, freezerSize, 0 gasTankSizeInGallons, 0 windowCleanerInGallons
    FROM
        grocery_stores
    UNION
    SELECT
        storeName, storeCity, storeState, 0 numberOfCarts, 0 freezerSize, gasTankSizeInGallons, windowCleanerInGallons
    FROM
        gas_stations
    ORDER BY storeState, storeCity, storeName
</select>

注意 - 实际查询在顺序中有更多的东西,它是分页的,并且select中还有更多的字段(加上select字段中每个适用字段的where子句)。

上述查询的resultClass应该是什么?我有一个GroceryStore和GasStation类,它们都来自Store。但是,Store没有很多GroceryStore和GasStation特定字段。我可以做两个单独的查询,但结果的排序必须在java中完成,因为它需要首先加载大量数据,所以效率很低。

由于

1 个答案:

答案 0 :(得分:1)

经过大量的谷歌搜索,我找到了自己问题的答案。

ibatis鉴别器将在gasStation和groceryStore类之间进行选择。

<resultMap id="searchResultMap" class="Store">
     <discriminator column="storeType" javaType="java.lang.String">
           <subMap value="grocery" resultMap="groceryStoreMap"/>
           <subMap value="gasStation" resultMap="gasStationMap"/>
     </discriminator>
</resultMap>

然后我会编辑我的查询以在选择字段中添加storeType并为groceryStore和gasStation创建resultMap。

注意 - 为了解决这个问题,我读了this stackoverflow question