MyBatis 可以执行一对一、一对多的关联查询,下面为你详细介绍实现方式及区别。
一对一关联查询
一对一关联查询指的是一个主表记录只关联从表的一条记录。常见的实现方式有两种:嵌套查询和嵌套结果。
嵌套查询
这种方式通过执行多个 SQL 语句来完成关联查询。先查询主表记录,再根据主表记录的某个字段值去查询从表记录。
嵌套结果
该方式通过执行一个 SQL 语句,将主表和从表进行连接查询,然后使用resultMap
来映射结果。
一对多关联查询
一对多关联查询是指一个主表记录关联从表的多条记录。实现方式同样有嵌套查询和嵌套结果。
嵌套查询
先查询主表记录,再根据主表记录的某个字段值去查询从表的多条记录。
嵌套结果
通过执行一个 SQL 语句,将主表和从表进行连接查询,然后使用resultMap
来映射结果。
两种实现方式的区别
- 性能方面:嵌套查询会执行多个 SQL 语句,可能会出现 N + 1 问题(查询主表记录执行 1 条 SQL,查询从表记录会根据主表记录数量执行 N 条 SQL),性能较低;而嵌套结果只执行一个 SQL 语句,性能相对较好。
- 代码复杂度方面:嵌套查询的代码结构更清晰,每个 SQL 语句负责单一的查询任务;嵌套结果的代码需要在一个 SQL 语句中处理复杂的连接查询,代码复杂度相对较高。
- 数据一致性方面:嵌套查询由于多次查询数据库,在高并发场景下可能会出现数据不一致的问题;嵌套结果在一个事务中执行一个 SQL 语句,数据一致性更好。