0

我在 MyBatis 关联模型中发现了这个概念:

我有两个表:Person 和 Book,每个 Person 可以有很多 Books,

@Select("SELECT * FROM person")
@Results(value = {
    @Result(property = "personId", id=true,column = "personId"),
    @Result(property="books",  column="personId",  javaType=ArrayList.class, many=@Many(select="getAllBooks")),
})
ArrayList<Person> getAllPersons ();


@Select("SELECT * FROM book where personId=#{personId}")
ArrayList<Book> getAllBooks(int personId);

所以假设我们有 1000 人,这意味着这个查询将执行 1000 次:

@Select("SELECT * FROM book where personId=#{personId}")

问题是如何(或者如果可能的话)在一个查询中获取所有书籍并使用 PK/FK 将它们映射到所有人。我相信它发生在 JPA 中。

4

1 回答 1

0

我在 MyBatis Docs 中发现了 N+1 个问题:

虽然这种方法很简单,但它不适用于大型数据集或列表。这个问题被称为“N+1 选择问题”。简而言之,N+1 选择问题是这样引起的:

You execute a single SQL statement to retrieve a list of records (the "+1").
For each record returned, you execute a select statement to load details for each (the "N")

这是链接: http: //mybatis.github.io/mybatis-3/sqlmap-xml.html

于 2013-10-08T17:40:43.230 回答