mybatis三表联查
时间: 2023-11-09 20:14:17 浏览: 76
mybatis联合查询
MyBatis是一款优秀的持久层框架,可以通过xml配置文件或注解方式来进行SQL语句的编写,下面是一个三表联查的示例:
假设我们有三张表:用户表(user)、订单表(order)、订单详情表(order_item)
user表结构:
| 字段名 | 类型 | 描述 |
| --- | --- | --- |
| id | int | 用户id |
| username | varchar(50) | 用户名 |
| password | varchar(50) | 密码 |
order表结构:
| 字段名 | 类型 | 描述 |
| --- | --- | --- |
| id | int | 订单id |
| user_id | int | 用户id |
| order_no | varchar(20) | 订单号 |
order_item表结构:
| 字段名 | 类型 | 描述 |
| --- | --- | --- |
| id | int | 详情id |
| order_id | int | 订单id |
| product_name | varchar(50) | 商品名称 |
| product_price | decimal(10,2) | 商品价格 |
我们要查询出用户信息以及所对应的订单信息和订单详情信息,可以使用MyBatis的association和collection标签来进行关联查询,具体的mapper.xml如下:
```
<!-- 声明resultMap,定义查询结果集 -->
<resultMap id="userOrderItemMap" type="com.example.pojo.User">
<id property="id" column="id"/>
<result property="username" column="username"/>
<result property="password" column="password"/>
<!-- 使用association关联查询订单信息 -->
<association property="orderList" column="id" javaType="java.util.List" select="com.example.mapper.OrderMapper.findByUserId"/>
</resultMap>
<!-- 声明resultMap,定义查询结果集 -->
<resultMap id="orderItemMap" type="com.example.pojo.Order">
<id property="id" column="id"/>
<result property="orderNo" column="order_no"/>
<!-- 使用collection关联查询订单详情信息 -->
<collection property="orderItemList" column="id" javaType="java.util.List" select="com.example.mapper.OrderItemMapper.findByOrderId"/>
</resultMap>
<!-- 根据用户id查询用户信息以及订单信息和订单详情信息 -->
<select id="findUserWithOrderAndOrderItemByUserId" resultMap="userOrderItemMap">
SELECT u.id, u.username, u.password
FROM user u
WHERE u.id = #{userId}
</select>
<!-- 根据用户id查询订单信息 -->
<select id="findByUserId" resultMap="orderItemMap">
SELECT o.id, o.order_no
FROM `order` o
WHERE o.user_id = #{userId}
</select>
<!-- 根据订单id查询订单详情信息 -->
<select id="findByOrderId" resultType="com.example.pojo.OrderItem">
SELECT oi.id, oi.product_name, oi.product_price
FROM order_item oi
WHERE oi.order_id = #{orderId}
</select>
```
在UserMapper中,我们定义了一个findUserWithOrderAndOrderItemByUserId方法,该方法使用了association标签来关联查询订单信息,同时在OrderMapper中,我们定义了一个findByUserId方法,该方法使用了collection标签来关联查询订单详情信息。最后,在OrderItemMapper中,我们定义了一个findByOrderId方法,用于查询订单详情信息。
使用以上的mapper.xml配置和对应的实体类,我们就可以实现三表联查的功能了。
阅读全文