使用MyBatis返回Object内Object的列表

时间:2015-07-04 12:39:58

标签: java sql spring oracle mybatis

在使用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

我在网上搜索,但未找到任何有用的内容。你能帮助我并指出我做错了什么吗?

1 个答案:

答案 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