Mybatis——返回类型为 集合嵌套集合 应该如何处理

    最近在练习时 遇到了类似于 企鹅里的好友分组功能,使用的持久层框架是mybatis 第一次处理这种关系 记录一下 备忘。。

首先是表结构:094154_tnoj_3259168.png

       <user_group > 好友分组 、 <t_group> 用户与好友分组的关联表 、 <t_user> 用户表

实现需求的返回格式:

        095033_41St_3259168.png

之后就到了重点,处理这种数据格式 重点在Mybatis的resultMap 和 对应的实体类:

        分组实体类 UserGroupsView

public class UserGroupsView {    
    /**
     * 好友分组ID
     */
    @Id
    private Integer id;

    /**
     * 好友分组名
     */
    @Column(name = "groupname" )
    private String groupName;

    /**
     * 分组下好友集合
     */
    private List<UserGroupView> userGroupViewList;
}

         分组下好友实体类UserGroupView

public class UserGroupView {
    /**
     * 好友分组ID
     */
    @Id
    @Column(name="user_group_id")
    private Integer userGroupId;

    /**
     * 好友ID
     */
    @Column(name = "friend_id")
    private Integer friendId;

    /**
     * 用户昵称
     */
    private String username;

    /**
     * 在线状态 online:在线、offline:离线、hide:隐身
     */
    private String status;

    /**
     * 用户签名
     */
    private String sign;

    /**
     * 头像URL
     */
    private String avatar;

    /**
     * 是否删除 0,(否)/1,(是)
     */
    @Column(name = "is_delete")
    private Integer isDelete;
}

在mybatis中的处理:

    这里的重点应该是 id为UserGroupsMap 中的返回集合类型上,这个resultMap返回的集合 对应着UserGroupView实体类 所以返回到 分组实体类中 是一个集合。

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.mapper.UserGroupMapper">
    <resultMap id="BaseResultMap" type="com.model.UserGroup">

        <id column="id" jdbcType="INTEGER" property="id"/>
        <result column="group_id" jdbcType="INTEGER" property="groupId"/>
        <result column="friend_id" jdbcType="INTEGER" property="friendId"/>
    </resultMap>

    <resultMap id="UserGroupMap" type="com.model.view.UserGroupView">

        <id column="user_group_id" jdbcType="INTEGER" property="userGroupId"/>
        <result column="friend_id" jdbcType="INTEGER" property="friendId"/>
        <result column="username" jdbcType="VARCHAR" property="username"/>
        <result column="status" jdbcType="VARCHAR" property="status"/>
        <result column="sign" jdbcType="VARCHAR" property="sign"/>
        <result column="avatar" jdbcType="VARCHAR" property="avatar"/>
        <result column="is_delete" jdbcType="INTEGER" property="isDelete"/>
    </resultMap>

    <resultMap id="UserGroupsMap" type="com.model.view.UserGroupsView">

        <id column="id" jdbcType="INTEGER" property="id"/>
        <result column="groupname" jdbcType="INTEGER" property="groupName"/>
        <collection property="userGroupViewList" resultMap="UserGroupMap"/>
    </resultMap>


    <select id="selectGroups" resultMap="UserGroupsMap">
        SELECT
        t_group.id,
        t_group.groupname,
        user_group.id AS user_group_id,
        t_user.id AS friend_id,
        t_user.username,
        t_user.`status`,
        t_user.sign,
        t_user.avatar
        FROM
        user_group
        INNER JOIN t_user ON user_group.friend_id = t_user.id
        INNER JOIN t_group ON t_group.id = user_group.group_id
        WHERE
        <!-- 这里暂时把userId写死-->
        t_group.user_id = 1
    </select>

</mapper>

        对应mapper的interface

public interface UserGroupMapper extends Mapper<UserGroup> {

    // 获取用户好友分类 及其分类下的好友
    List<UserGroupsView> selectGroups();
}

        执行sql语句的返回结果大概是这样:

转载于:https://my.oschina.net/danjuan/blog/906437

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值