mybatis返回集合对象包含List<String>
程序员文章站
2022-11-23 15:58:52
需求:笔者最近遇到一个需求:一个团队对应多个人,一个人只能有一个团队根据团队的成绩的降序,查询出这个团队的信息,和这个团队中每个人的名字。分析:首先:需要查询出每个人团队的信息其次:查询出每个团队对应的用户名所以返回结果应该是返回一个List,List中每一个对象就是数据库表:(数据库表只显示了部分必要字段)团队表CREATE TABLE `team` ( `id` varchar(255) NOT NULL COMMENT '雪花算法,id', `team_...
需求:
笔者最近遇到一个需求:
- 一个团队对应多个人,一个人只能有一个团队
- 根据团队的成绩的降序,查询出每个团队的信息,和其中每一个团队中每个人的名字。
分析:
- 首先:需要查询出每个人团队的信息
- 其次:查询出每个团队中对应的用户的名字
- 所以返回结果应该是
- 返回一个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='人员表';
解决方案:
- sql
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
推荐阅读
-
【转载】C#中List集合使用Contains方法判断是否包含某个对象
-
mybatis返回集合对象包含List<String>
-
MyBatis 封装Map,返回不同实体的集合对象
-
Java工具类 通过ResultSet对象返回对应的实体List集合
-
Mybatis查询多条记录并返回List集合
-
mybatis循环遍历map中list、string、实体对象
-
mybatis——返回结果类型为集合类型(List、Map)
-
mybatis 返回Map<String,List<Entity>> 格式数据
-
Mybatis 查询返回List
集合 -
Mybatis 查询返回List集合、map集合、List<Map>集合