2019独角兽企业重金招聘Python工程师标准>>>
最近在练习时 遇到了类似于 企鹅里的好友分组功能,使用的持久层框架是mybatis 第一次处理这种关系 记录一下 备忘。。
首先是表结构:
<user_group > 好友分组 、 <t_group> 用户与好友分组的关联表 、 <t_user> 用户表
实现需求的返回格式:
之后就到了重点,处理这种数据格式 重点在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语句的返回结果大概是这样: