One to many relationship in MyBatis(MyBatis中的一对多关系)
本文介绍了MyBatis中的一对多关系的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
我正在尝试使用MyBatis在我的数据模型中映射一对多关系。这基于以下类:
class Team{
String mId;
String mName;
List<Player> mPlayers;
}
class Player{
String mId;
String mName;
}
我想编写一个返回匹配列表的查询,每个匹配列表都填充了与该匹配对应的标记。
<select id="getTeams" resultType="Team" resultMap="TeamMap">
SELECT id, name, players.id as player_id, players.name as player_name
FROM teams
JOIN players ON teams.id = players.team_id
</select>
<resultMap type="Team" id="TeamMap">
<id property="mId" column="id"/>
<result property="mName" column="name"/>
<collection property="mTags" javaType="List" ofType="Player">
<id property="player_id" column="mId"/>
<result property="player_name" column="mName"/>
</collection>
</resultMap>
但我遇到的问题是,每个Team对象只填充了一个球员。如何更改此设置以确保每支球队都包含属于它的所有球员?
推荐答案
我试图回答这个问题,并使用注释在Mybatis中创建了一对多关系。以下是我的代码
UserMapper.java
@Select("SELECT teamId, name FROM TEAM")
@Results(value = {
@Result(property="teamId", column = "teamId"),
@Result(property="name", column = "name"),
@Result(property="players", column="teamId", javaType= List.class, many=@Many(select="selectPlayers"))
})
public List<Team> getAllTeams();
@Select("SELECT * FROM PLAYER WHERE teamId = #{teamId}")
@Results(value={
@Result(property="playerId", column ="playerId" ),
@Result(property="name", column = "name")
})
List<Player> selectPlayers(String teamId);
我的Team.java:
public class Team {
private Long teamId;
private String name;
private List<Player> players;
//...getters and setters
}
Player.java:
public class Player {
private Long playerId;
private String name;
private Team team;
//...getter and setters
}
Team.sql
CREATE TABLE `team` (
`teamId` bigint(10) NOT NULL AUTO_INCREMENT,
`name` varchar(50) DEFAULT NULL,
PRIMARY KEY (`teamId`)
)
player.sql
CREATE TABLE `player` (
`playerId` bigint(10) NOT NULL AUTO_INCREMENT,
`name` varchar(50) DEFAULT NULL,
`teamId` bigint(10) DEFAULT NULL,
PRIMARY KEY (`playerId`),
KEY `FK_TEAM_ID` (`teamId`),
CONSTRAINT `FK_TEAM_ID` FOREIGN KEY (`teamId`) REFERENCES `team` (`teamId`)
)
UserServiceImpl.java
@Autowired
private UserMapper userMapper;
...
/* Get the list of teams with players data */
List<Team> teams = userMapper.getAllTeams();
...
希望本文对未来的读者有所帮助。
这篇关于MyBatis中的一对多关系的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持编程学习网!
沃梦达教程
本文标题为:MyBatis中的一对多关系
基础教程推荐
猜你喜欢
- 如何使用 Stream 在集合中拆分奇数和偶数以及两者的总和 2022-01-01
- 首次使用 Hadoop,MapReduce Job 不运行 Reduce Phase 2022-01-01
- 如何强制对超级方法进行多态调用? 2022-01-01
- 如何使用 Eclipse 检查调试符号状态? 2022-01-01
- Spring Boot Freemarker从2.2.0升级失败 2022-01-01
- 由于对所需库 rt.jar 的限制,对类的访问限制? 2022-01-01
- Java 中保存最后 N 个元素的大小受限队列 2022-01-01
- 如何在不安装整个 WTP 包的情况下将 Tomcat 8 添加到 Eclipse Kepler 2022-01-01
- 如何对 HashSet 进行排序? 2022-01-01
- 在螺旋中写一个字符串 2022-01-01