mybatis 关联查询

2023-03-28  本文已影响0人  笨的很想飞

MyBatis 可以通过定义多个表的关联关系,实现多表查询。下面介绍两种常用的多表关联查询方法。

1. 嵌套查询

第一种方法是通过嵌套查询来实现多表关联查询。具体步骤如下:

//1.在 Mapper 接口中定义查询方法,方法返回值为一个包含多个实体对象的父实体对象。例如:

User selectUserWithOrders(Integer userId);

//2.在 Mapper XML 文件中编写 SQL 语句,使用嵌套查询来引用另一个表的数据。例如:
<select id="selectUserWithOrders" resultMap="userWithOrdersResultMap">
  select * from user where id = #{userId}
</select>

<resultMap id="userWithOrdersResultMap" type="User">
  <id property="id" column="id"/>
  <result property="name" column="name"/>
  <!-- 其他属性 -->

  <collection property="orders" ofType="Order">
    <id property="id" column="order_id"/>
    <result property="name" column="order_name"/>
    <!-- 其他属性 -->
  </collection>
</resultMap>
//在上面的代码中,<collection> 标签定义了一个集合属性,它的 property 属性指定了要映射的集合属性名称,
ofType 属性指定了集合中元素的类型。在 <collection> 标签内部,可以再定义多个子标签来指定集合元素的字段映射。

//3.在调用查询方法时,传入用户 ID,即可查询到该用户及其所有订单的信息。例如:

User user = userMapper.selectUserWithOrders(1);

2. 多表关联查询

//1.在 Mapper 接口中定义查询方法,方法返回值为一个包含多个实体对象的父实体对象。例如:
List<User> selectUsersAndOrders();

//2.在 Mapper XML 文件中编写 SQL 语句,使用 JOIN 语句来实现多表关联查询。例如:

<select id="selectUsersAndOrders" resultMap="userWithOrdersResultMap">
  select u.*, o.*
  from user u
  left join orders o on u.id = o.user_id
</select>

<resultMap id="userWithOrdersResultMap" type="User">
  <id property="id" column="id"/>
  <result property="name" column="name"/>
  <!-- 其他属性 -->

  <collection property="orders" ofType="Order">
    <id property="id" column="order_id"/>
    <result property="name" column="order_name"/>
    <!-- 其他属性 -->
  </collection>
</resultMap>
//在上面的代码中,使用 LEFT JOIN 关键字将两个表连接起来,并使用 u.* 和 o.* 来选择需要查询的字段。在 <resultMap> 中同样定义了用户和订单的映射关系。

//3.在调用查询方法时,即可查询到所有用户及其所有订单的信息。例如:
List<User> users = userMapper.selectUsersAndOrders();




上一篇 下一篇

猜你喜欢

热点阅读