在 MyBatis 中实现一对多关系的查询可以通过多种方式实现。我将为你介绍两种常见的实现方式:嵌套查询和嵌套结果映射。以下是每种方式的详细步骤流程以及相关示例代码。
假设我们有两个实体类: Author
(作者)和 Book
(书籍),一个作者可以拥有多本书。下面将使用这两个实体类来演示这两种一对多关系的查询方式。
步骤流程:
Maven 依赖坐标:
<!-- MyBatis -->
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
<version>3.x.x</version>
</dependency>
示例代码:
// Author.java
public class Author {
private int id;
private String name;
private List<Book> books;
// Getters and setters
}
// Book.java
public class Book {
private int id;
private String title;
private int authorId;
// Getters and setters
}
// AuthorMapper.java
public interface AuthorMapper {
Author getAuthorWithBooks(int authorId);
}
<!-- AuthorMapper.xml -->
<mapper namespace="com.example.AuthorMapper">
<select id="getAuthorWithBooks" resultType="Author">
SELECT * FROM authors WHERE id = #{authorId}
</select>
</mapper>
步骤流程:
Maven 依赖坐标:
<!-- MyBatis -->
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
<version>3.x.x</version>
</dependency>
示例代码:
// Author.java
public class Author {
private int id;
private String name;
private List<Book> books;
// Getters and setters
}
// Book.java
public class Book {
private int id;
private String title;
private int authorId;
// Getters and setters
}
// AuthorMapper.java
public interface AuthorMapper {
List<Author> getAllAuthorsWithBooks();
}
<!-- AuthorMapper.xml -->
<mapper namespace="com.example.AuthorMapper">
<resultMap id="authorResultMap" type="Author">
<id property="id" column="id" />
<result property="name" column="name" />
<collection property="books" ofType="Book">
<id property="id" column="book_id" />
<result property="title" column="book_title" />
<result property="authorId" column="author_id" />
</collection>
</resultMap>
<select id="getAllAuthorsWithBooks" resultMap="authorResultMap">
SELECT
a.id,
a.name,
b.id AS book_id,
b.title AS book_title,
b.author_id
FROM authors a
LEFT JOIN books b ON a.id = b.author_id
</select>
</mapper>
以上是两种在 MyBatis 中实现一对多关系查询的方式。你可以根据项目的需求选择其中一种方式来实现,并根据示例代码进行配置和编码。记得将对应的接口、XML 映射文件以及实体类正确放置在项目中,以确保一切正常运行。