Mybatis 实现两表联合查询:order_items 和 products
- 首先需要在 com.ecommerce.book 包下新建一个 mapper 包,用于存放 mybatis 的 mapper 接口和 xml 配置文件。
- 在 mapper 包下新建一个 OrderItemMapper 接口,用于定义联合查询的方法。代码如下:
package com.ecommerce.book.mapper;
import com.ecommerce.book.entity.OrderItem;
import com.ecommerce.book.entity.Product;
import java.util.List;
public interface OrderItemMapper {
List<OrderItem> getOrderItemsWithProduct(); //联合查询方法
}
- 在 mapper 包下新建一个 OrderItemMapper.xml 文件,用于配置联合查询的 SQL 语句。代码如下:
<?xml version='1.0' encoding='UTF-8'?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.ecommerce.book.mapper.OrderItemMapper">
<resultMap id="OrderItemResultMap" type="com.ecommerce.book.entity.OrderItem">
<id property="id" column="id"/>
<result property="productId" column="product_id"/>
<result property="quantity" column="quantity"/>
<result property="price" column="price"/>
<association property="product" column="product_id" javaType="com.ecommerce.book.entity.Product" select="getProductById"/>
</resultMap>
<select id="getOrderItemsWithProduct" resultMap="OrderItemResultMap">
SELECT * FROM order_items
LEFT JOIN products ON order_items.product_id = products.id
</select>
<select id="getProductById" parameterType="Long" resultType="com.ecommerce.book.entity.Product">
SELECT * FROM products WHERE id = #{id}
</select>
</mapper>
- 在 com.ecommerce.book 包下新建一个 service 包,用于存放业务逻辑代码。
- 在 service 包下新建一个 OrderItemService 接口,用于定义联合查询的方法。代码如下:
package com.ecommerce.book.service;
import com.ecommerce.book.entity.OrderItem;
import java.util.List;
public interface OrderItemService {
List<OrderItem> getOrderItemsWithProduct(); //联合查询方法
}
- 在 service 包下新建一个 OrderItemServiceImpl 实现类,用于实现联合查询的方法。代码如下:
package com.ecommerce.book.service.impl;
import com.ecommerce.book.entity.OrderItem;
import com.ecommerce.book.mapper.OrderItemMapper;
import com.ecommerce.book.service.OrderItemService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.util.List;
@Service
public class OrderItemServiceImpl implements OrderItemService {
@Autowired
private OrderItemMapper orderItemMapper;
@Override
public List<OrderItem> getOrderItemsWithProduct() {
return orderItemMapper.getOrderItemsWithProduct();
}
}
- 最后,在需要调用联合查询的地方注入 OrderItemService,并调用 getOrderItemsWithProduct 方法即可。
原文地址: https://www.cveoy.top/t/topic/nDH8 著作权归作者所有。请勿转载和采集!