Java 面试题
目录

基于 Java 的 MyBatis 如何处理一对一、一对多、多对多的关系?

· 约 4 分钟读完 · 第 206 / 274 章

推荐答案

在 MyBatis 中,处理一对一、一对多、多对多的关系通常通过 resultMap 来实现。以下是每种关系的处理方式:

一对一关系

使用 <association> 标签来映射一对一关系。

一对多关系

使用 <collection> 标签来映射一对多关系。

多对多关系

多对多关系通常通过中间表来实现,使用 <collection> 标签来映射。

本题详细解读

一对一关系

在 MyBatis 中,一对一关系通常表示一个对象包含另一个对象的引用。例如,一个 User 对象可能包含一个 Profile 对象。通过 <association> 标签,可以将查询结果中的列映射到 Profile 对象的属性上。

一对多关系

一对多关系表示一个对象包含多个其他对象的集合。例如,一个 User 对象可能包含多个 Post 对象。通过 <collection> 标签,可以将查询结果中的多行数据映射到 Post 对象的集合上。

多对多关系

多对多关系通常通过中间表来实现。例如,一个 User 对象可能有多个 Role 对象,而一个 Role 对象也可能属于多个 User 对象。通过 <collection> 标签,可以将查询结果中的多行数据映射到 Role 对象的集合上。

示例 SQL 查询

以下是一个处理多对多关系的 SQL 查询示例:

在这个查询中,user_roles 表是中间表,用于连接 users 表和 roles 表。通过 resultMap,可以将查询结果映射到 User 对象的 roles 集合中。