在使用MyBatis时,在另一个Object中返回对象列表时遇到问题。我的主要对象看起来像这样:
private Long id;
private String symbol;
private List<TypePermission> typePermissions;
我的mapper看起来像这样
<resultMap type="CalendarType" id="calendarTypeMap">
<result column="id" property="id"/>
<result column="symbol" property="symbol"/>
<collection property="TypePermissions" resultMap="TypePermissions"/>
</resultMap>
<resultMap id="TypePermissions" type="TypePermission">
<result property="roleId" column="roleId"/>
<result property="permissionSymbol" column="permissionSymbol"/>
</resultMap>
我的目标是获得这样的对象:
content:[
"id":id,
"symbol":symbol,
"TypePermissions":{
"roleId":roleId,
"permissionSymbol":permissionSymbol
}
]
当我执行sql查询时,我得到以下错误cannot find symbol TypePermissions
,因为主SELECT尝试选择行,例如TYPEPERMISSIONS,ID,SYMBOL
我在网上搜索,但未找到任何有用的内容。你能帮助我并指出我做错了什么吗?
答案 0 :(得分:7)
请发布您的选择代码段,我认为这样就可以了:
<select id="selectCalendarType" parameterType="int" resultMap="calendarTypeMap">
SELECT c.id,
c.symbol
t.roleId,
t.permissionSymbol
FROM CalendarType c
LEFT JOIN TypePermission t ON c.id = t.c_id
WHERE c.id = #{id}
</select>
我认为你会得到的是这样的事情:
content:{
"id":id,
"symbol":symbol,
"TypePermissions":[{
"roleId":roleId,
"permissionSymbol":permissionSymbol
}]
}
关于这一点,您可以阅读此示例Nested_Results_for_Collection