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

2019独角兽企业重金招聘Python工程师标准>>> hot3.png

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

首先是表结构:094154_tnoj_3259168.png

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

实现需求的返回格式:

        095033_41St_3259168.png

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

        分组实体类 UserGroupsView

public class UserGroupsView {    /*** 好友分组ID*/@Idprivate 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">SELECTt_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.avatarFROMuser_groupINNER JOIN t_user ON user_group.friend_id = t_user.idINNER JOIN t_group ON t_group.id = user_group.group_idWHERE<!-- 这里暂时把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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/290281.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

为什么用 windbg 看 !address 显示出的Free是128T 大小?

总是被朋友问&#xff0c;用 !address -summary 显示出上面的 Free ≈ 128T 到底是什么意思&#xff1f;我的空闲内存不可能有这么大,不管怎么说&#xff0c;先上命令。0:009> !address -summary--- Usage Summary ---------------- RgnCount ----------- Total Size ------…

DeepMind 的马尔可夫决策过程(MDP)课堂笔记

DeepMind Teaching by David Silver 视频课程链接&#xff08;Youtube资源&#xff0c;需梯子&#xff09;&#xff1a;https://youtu.be/lfHX2hHRMVQ 文章目录DeepMind Teaching by David Silver1. 马尔可夫过程&#xff08;Markov Processes&#xff09;2. 马尔可夫回报过程…

C和指针之字符串编程练习3

1、问题 编写函数类似strcat函数,但是不会溢出目标数组&#xff0c;结果必须是一个正真的字符串 2、实现代码 #include <stdio.h> #include <string.h>//编写函数类似strcpy函数,但是不会溢出目标数组&#xff0c;结果必须是一个正真的字符串 char *my_strcpy(cha…

深入Java集合学习系列:ConcurrentHashMap之实现细节

http://www.iteye.com/topic/344876 ConcurrentHashMap是Java 5中支持高并发、高吞吐量的线程安全HashMap实现。在这之前我对ConcurrentHashMap只有一些肤浅的理解&#xff0c;仅知道它采用了多个锁&#xff0c;大概也足够了。但是在经过一次惨痛的面试经历之后&#xff0c;我觉…

基于小波变换的信号降噪处理及仿真研究_信号处理方法推荐--1(转载自用,侵删)...

综述作者&#xff1a;aresmiki链接&#xff1a;https://www.zhihu.com/question/23701194/answer/167005497来源&#xff1a;知乎著作权归作者所有。商业转载请联系作者获得授权&#xff0c;非商业转载请注明出处。非平稳信号处理应该是现在信号处理技术最新的也是最热的研究方…

js温故而知新11(AJAX)——学习廖雪峰的js教程

Asynchronous JavaScript and XML&#xff0c;意思就是用JavaScript执行异步网络请求。 如果仔细观察一个Form的提交&#xff0c;你就会发现&#xff0c;一旦用户点击“Submit”按钮&#xff0c;表单开始提交&#xff0c;浏览器就会刷新页面&#xff0c;然后在新页面里告诉你操…

linux下重启mysql php nginx

# /etc/init.d/mysql restart # /etc/init.d/php-fpm restart # /etc/init.d/nginx restart转载于:https://www.cnblogs.com/yiluxiuxing/p/4140627.html

C和指针之字符串编程练习9(在参数1中查找匹配参数2额任意字符)

1、问题 函数应该在第一个参数中进行查找&#xff0c;并返回匹配第二个参数所包含的字符的数目 2、代码实现 #include <stdio.h> #include <string.h>//函数应该在第一个参数中进行查找&#xff0c;并返回匹配第二个参数所包含的字符的数目 int count_chars(char…

最流行的 .NET 开源项目合集

Github 上有很多优秀的 .NET 开源项目&#xff0c;它们很适合用来学习 .NET 、设计模式和架构。nopCommerce https://github.com/nopSolutions/nopCommercestar: 7k ⭐nopCommerce 是最受欢迎最好的开源电子商务购物车解决方案之一&#xff0c;它基于 ASP.NET Core&#xff…

绿米开关如何重置_三种墙壁开关:绿米、调光、凌动/米家之间的异同

三种墙壁开关&#xff1a;绿米、调光、凌动/米家之间的异同2020-06-18 18:17:179点赞28收藏6评论三种墙壁开关&#xff1a;绿米、调光、凌动/米家之间的异同详细讲解绿米Aqara智能墙壁开关、Yeelight调光开关(86盒版)、Yeelight凌动开关/米家墙壁开关(米家墙壁开关也是Yeelight…

NES模拟器开发-PPU笔记

20151008 占坑,暂时没弄清楚PPU数据如何初始化,绘制顺序等. 转载于:https://www.cnblogs.com/Red_angelX/p/4860497.html

phpRedisAdmin 安装

phpRedisAdmin是一个web端管理redis的工具&#xff0c;每次都是命令行操作&#xff0c;今天安装了下&#xff0c;做个笔记[rootlocalhost linshi]# git clone https://github.com/ErikDubbelboer/phpRedisAdmin.git Initialized empty Git repository in /root/linshi/phpRedis…

GFS(Genetic Fuzzy Systems)—— 基于专家先验规则库和遗传算法相结合的智能体决策算法

文章目录1. FIS 系统&#xff08;Fuzzy Inference Systems&#xff09;1.1 什么是 FIS 系统&#xff1f;1.2 使用 FIS 算法的几个步骤2. GFS 系统&#xff08;GA FIS&#xff09;2.1 什么是基因遗传算法&#xff08;GA&#xff09;?2.2 使用GA算法进化FIS规则库在大规模的多智…

3-unit1 IPv6网络的管理

##########IPv6网络的管理#############学习目标了解IPv6管理IPv6##)IPv6简介Internet Protocol Version 6IPv6是IETF&#xff08;和互联网工程任务组&#xff09;设计的用与替代现行版本IP协议的下一代IP协议。IPv6采用128位2进制数码表示##IPv6示意图:##IPv6表示方式为方便操…

C和指针之字符串编程练习8实现char *my_strnchr(char const *str, int ch, int which)

1、问题 编写函数类似strchr函数,但是它有3个参数,第三个参数是1, 这个函数的功能就和strchr完全一样, 如果第三个参数是2,这个函数就返回一个指向ch字符在str字符串第二次出现的位置的指针,以此类推 2、代码实现 1 #include <stdio.h>2 #include <string.h>3…

Xamarin效果第一篇之时间轴

一直都想找个时间玩玩移动端,中间也去各种的调研快速的方式去开发;过程中还是太浮躁木有沉下心去学习;好早尝试过Flutter,二点让我不爽:1、配置环境好费劲(VS把我惯坏了)&#xff1b;2、套娃的写法真是恶心;来看看酸爽不:因为一直都是C#开发,所以这次再次摸索Xamarin去开发;前面…

bootstrap tabale 点击_jquery+bootstrap实现tab切换, 每次切换时都请求数据, 点击提交分别向不同的地址提交数据...

今天一个朋友叫帮做一个tab切换, 每一个tab内容区域都是从后台取出的数据, 这些数据要用表格的形式显示处理, 并且表格的内容区域可以修改, 如下所示:例子查看请演示查看.截图如图所示:实现步骤:几个需要注意的点:1. tab部分加一个data-id, 当中的id与下面要显示的具体内容的ta…

AJAX+json+jquery实现预加载瀑布流布局

AJAXjsonjquery实现预加载瀑布流布局转载于:https://www.cnblogs.com/zhujiabin/p/4860954.html

Lync 小技巧-42-动态-IP-统一沟通-环境-IP-变更后-操作

1. 查看-你的-公网IPhttp://www.ip138.com/2. 修改-你的-公网A记录https://www.godaddy.com/3. 修改-你的-拓朴-For-边缘服务器3.1.远程-前端服务器3.2.下载-拓朴3.3.选择-边缘服务器3.4.选择-边缘服务器3.5.修改-公网IP116.230.255.783.5.发布-拓朴3.6.导出-拓朴3.7.复制-拓朴…

C和指针之字符串memcpy、memmove、memset使用总结

1、介绍memcpy、memmove、memset 1) void *memcpy(void *dest, const void *src, size_t n); 从源src所指的内存地址的起始位置开始拷贝n个字节到目标dest所指的内存地址的起始位置中 2) void *memmove( void* dest, const void* src, size_t count ); 从src拷贝count个字节…