java-从单个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中完成,并且效率低下,因为它首先需要加载大量数据.

谢谢

解决方法:

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

ibatis鉴别器将在加油站和杂货店类之间进行选择.

<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并为杂货店和gasStation创建一个resultMap.

注意-为了弄清楚这一点,我读了this * question.

上一篇:ibatis带有点号(.)字符的java.util.Map参数


下一篇:java – 来自HashMap的MyBatis参数