我无法弄清楚如何在复杂的对象中使用mybatis结果。嵌套的mybatis地图
我有以下的映射器类:
public interface StationMapper {
@MapKey("stationId")
Map<Integer,Station> getStations();
}
这是从下面的结果映射建:
<resultMap id="stationMap" type="Station">
<result column="station_id" property="stationId" />
<result column="another_id" property="notUniqueId" />
<result column="name" property="name" />
</resultMap>
不是地图,我想为getStations返回类型()来是一个将地图(或集合)作为构造函数的对象,以便我可以在对象构造上执行一些代码。
public class FancyStationMapHolder {
public FancyStationMapHolder(Map<Integer,Station> stations) {
executeSpecialCode(stations);
}
// OR
public FancyStationMapHolder(Collection<Station> stations) {
executeSpecialCode(stations);
}
}
public interface StationMapper {
FancyStationMapHolder getStations();
}
我不认为我可以使用<结果映射> <集合>元素(和我试过),因为没有实际数据的关系。
或者,我想一个StationMapper方法与此签名:
@MapKey("notUniqueId")
Map<String,Collection<Station>> getStationsByNotUniqueId();
编辑: 如果我限制它基于一些列我能得到这个复杂的对象,设置属性,而不是使用一个构造函数,但是我怎么能没有关系限制呢?
<resultMap id="fancyMap" type="sample.FancyStationMapHolder">
<result column="someId" property="someId"/>
<collection property="stations" column="someId" resultMap="stationMap"
select="stations" javaType="ArrayList" />
</resultMap>
我更喜欢使用构造函数,所以我会很感激这方面的建议。下面的设置导致此异常:
org.mybatis.spring.MyBatisSystemException:
nested exception is org.apache.ibatis.reflection.ReflectionException:
Error instantiating class sample.FancyStationMapHolder with invalid types
(ArrayList,) or values ([...
<resultMap id="fancyMap" type="sample.FancyStationMapHolder">
<constructor>
<arg column="someId" resultMap="stationMap" select="stations"
javaType="ArrayList" />
</constructor>
<result column="someId" property="someId"/>
</resultMap>