zoukankan      html  css  js  c++  java
  • mybatis返回集合对象包含List<String>

    需求:
    最近遇到一个需求:

    一个团队对应多个人,一个人只能有一个团队
    根据团队的成绩的降序,查询出每个团队的信息,和其中每一个团队中每个人的名字。

    分析:

    首先:需要查询出每个人团队的信息
    其次:查询出每个团队中对应的用户的名字
    所以返回结果应该是
    返回一个List,List中每一个对象都是一个团队,然后每一个团队的人员名单显示到List<String> userNames中。
    数据库表:(数据库表只显示了部分必要字段)

    团队表

    CREATE TABLE `team` (
      `id` varchar(255) NOT NULL COMMENT '雪花算法,id',
      `team_id` varchar(255) DEFAULT NULL COMMENT '团队id',
      `team_name` varchar(255) DEFAULT NULL COMMENT '团队名字',
      `group_results` float(8,2) DEFAULT NULL COMMENT '团队成绩'
      PRIMARY KEY (`id`) USING BTREE
    ) COMMENT='团队表';

    人员表

    CREATE TABLE `person` (
      `id` varchar(255) NOT NULL DEFAULT '' COMMENT '主键id(用户id)',
      `team_id` varchar(22) DEFAULT NULL COMMENT '团队id',
      `user_code` varchar(22) DEFAULT NULL COMMENT '学号',
      `user_name` varchar(22) DEFAULT NULL COMMENT '用户姓名',
      PRIMARY KEY (`id`) USING BTREE
    ) COMMENT='人员表';

    解决方案:

    SELECT
        t.team_id,
        t.team_name,
        t.group_results,
        p.`user_name` 
    FROM
        `person` p
        RIGHT JOIN ( SELECT t.team_id, t.team_name, t.group_results FROM `team` t ) t ON p.team_id = t.team_id 
    ORDER BY
        group_results DESC

    实体
    构造的实体,很简单,但是重要的一点就是返回的用户名的集合

    @Data
    public class TeamRanking {
        private String teamName;//小组名字
        private Double teamGrade;//小组成绩
        private List<String> userNames;
        private Integer teamId;
    })

    dao层
    dao层返回的是上面那个对象的集合

    List<TeamRanking> selectTeamRanking();


    mybatis的mapper
    在Mapper中,使用了ResultMap的collection标签,并且:
    collection的properties=对应名字的集合
    collection标签中result标签的propertis内容也是对应集合的名字。

    <select id="selectTeamRanking" resultMap="selectTeamRankingMap">
            SELECT
                t.team_id,
                t.team_name,
                t.group_results,
                p.`user_name`
            FROM
                `person` p
                RIGHT JOIN ( SELECT t.team_id, t.team_name, t.group_results FROM `team` t  ) t ON p.team_id = t.team_id
            ORDER BY
                group_results DESC
        </select>
    
    
        <resultMap id="selectTeamRankingMap" type="com.tfjybj.typing.model.TeamRankingModel">
            <result property="teamId" column="team_id"></result>
            <result property="teamName" column="team_name"></result>
            <result property="teamGrade" column="group_results"></result>
            <collection property="userNames" ofType="string">
                <result property="userNames" column="user_name"></result>
            </collection>
        </resultMap>

    踩过的坑:
    笔者也使用过,但是最后都没有成功,最后在大家的讨论中,尝试出来上面的方式。

    如果有大佬研究过mybaits的映射源码的,笔者非常迫切的请求赐教。

    <resultMap id="selectTeamRankingMap" type="com.tfjybj.typing.model.TeamRankingModel">
            <result property="teamId" column="team_id"></result>
            <result property="teamName" column="team_name"></result>
            <result property="teamGrade" column="group_results"></result>
            <collection property="userNames" ofType="string"  column="user_name"></collection>
        </resultMap>
    <resultMap id="selectTeamRankingMap" type="com.tfjybj.typing.model.TeamRankingModel">
            <result property="teamId" column="team_id"></result>
            <result property="teamName" column="team_name"></result>
            <result property="teamGrade" column="group_results"></result>
            <collection ofType="string" column="user_name">
                <result property="userNames"></result>
            </collection>
        </resultMap>

    转:https://blog.csdn.net/qizhi666/article/details/109462142

  • 相关阅读:
    第九十一天 how can I 坚持 技术-永远的技术
    第九十天 how can I 坚持
    Java控制台中输入中文输出乱码的解决办法
    【体系结构】转移预测器设计与比较1
    Ubuntu 13.04 用Sublime Text 2 编译运行 JAVA
    HDU 4605 Magic Ball Game (在线主席树|| 离线 线段树)
    个人重构机房收费系统之报表
    快速排序的递归和非递归实现
    HDU 3721 Building Roads (2010 Asia Tianjin Regional Contest)
    体验决定深度,知识决定广度。你的人生是什么呢? 操蛋和扯蛋没必要纠结 唯有继续
  • 原文地址:https://www.cnblogs.com/panchanggui/p/15008162.html
Copyright © 2011-2022 走看看