MyBatis 关联映射

MyBatis通过``标签和``标签实现关联映射,一对一映射使用,一对多映射使用。嵌套查询和嵌套结果是两种实现方式,各有优缺点。

一、一对一关联映射

场景示例:

- 一个用户对应一个身份证,一个身份证只属于一个用户。

实现方式:

1. 嵌套查询:

   - 利用 `` 标签的 `select` 属性指定一个查询语句,该语句用于获取关联对象。

   - **示例**:

     ```xml

     

       

       

       

                    select="selectIdCardById" column="user_id"/>

     

     

     

     ```

   - 先执行用户查询,然后根据用户ID执行身份证查询。

2. 嵌套结果:

   - 在 `` 标签内直接定义关联对象的映射字段,通过一个联合查询同时获取主对象和关联对象的数据。

   - **示例**:

     ```xml

     

       

       

       

         

         

       

     

     

     ```

   - 通过一次查询,同时获取用户及其身份证信息。

二、一对多关联映射

场景示例:

- 一个用户有多个订单,一个订单只属于一个用户。

实现方式:

1. 嵌套查询:

   - 使用 `` 标签的 `select` 属性指定查询关联集合的语句。

   - **示例**:

     ```xml

     

       

       

       

                   select="selectOrdersByUserId" column="user_id"/>

     

     

     

     ```

   - 先查询用户,再根据用户ID查询其所有订单。

2. 嵌套结果:

   - 在 `` 标签内定义关联集合的映射,通过联合查询获取数据。

   - **示例**:

     ```xml

     

       

       

       

         

         

       

     

     

     ```

   - 一次查询返回用户及其所有订单信息。

三、嵌套查询与嵌套结果的比较

- 嵌套查询:

  - **优点**:查询语句简单,支持延迟加载。

  - **缺点**:可能引发N+1查询问题,影响性能。

- 嵌套结果:

  - **优点**:一次查询获取所有数据,性能较高,避免了N+1问题。

  - **缺点**:查询语句复杂,需要处理字段映射和重复数据,不支持延迟加载。

 

你可能感兴趣的:(mybatis)