Mybatis 一对多 xml实现
时间: 2024-01-11 07:02:02 浏览: 86
MyBatis 一对多关系的实现可以通过 XML 配置文件来完成。以下是一个示例:
假设有两个表:订单表和订单明细表,它们之间是一对多的关系,即一个订单可以对应多个订单明细。
1. 创建实体类
首先,需要创建两个实体类,一个是订单实体类,一个是订单明细实体类。在订单实体类中,需要添加一个属性,用来存储订单明细列表。
```java
public class Order {
private Integer id;
private String orderNo;
private List<OrderItem> orderItemList;
// getter/setter 省略
}
public class OrderItem {
private Integer id;
private Integer orderId;
private String productName;
// getter/setter 省略
}
```
2. 创建 Mapper 接口
创建两个 Mapper 接口,一个是订单 Mapper 接口,一个是订单明细 Mapper 接口。在订单 Mapper 接口中,添加一个方法,用来查询订单及其对应的订单明细列表。
```java
public interface OrderMapper {
Order selectOrderById(Integer id);
}
public interface OrderItemMapper {
List<OrderItem> selectOrderItemListByOrderId(Integer orderId);
}
```
3. 创建 SQL 映射文件
在订单 Mapper 接口的 XML 配置文件中,编写查询订单及其对应的订单明细列表的 SQL 语句。
```xml
<mapper namespace="com.example.mapper.OrderMapper">
<resultMap id="orderResultMap" type="com.example.entity.Order">
<id column="id" property="id"/>
<result column="order_no" property="orderNo"/>
<!-- 定义关联关系 -->
<collection property="orderItemList" ofType="com.example.entity.OrderItem"
resultMap="orderItemResultMap"/>
</resultMap>
<resultMap id="orderItemResultMap" type="com.example.entity.OrderItem">
<id column="id" property="id"/>
<result column="order_id" property="orderId"/>
<result column="product_name" property="productName"/>
</resultMap>
<select id="selectOrderById" resultMap="orderResultMap">
SELECT
o.id,
o.order_no,
oi.id AS oi_id,
oi.order_id,
oi.product_name
FROM
orders o
LEFT JOIN order_items oi ON o.id = oi.order_id
WHERE
o.id = #{id}
</select>
</mapper>
```
在订单明细 Mapper 接口的 XML 配置文件中,编写查询订单明细列表的 SQL 语句。
```xml
<mapper namespace="com.example.mapper.OrderItemMapper">
<select id="selectOrderItemListByOrderId" resultType="com.example.entity.OrderItem">
SELECT
id,
order_id,
product_name
FROM
order_items
WHERE
order_id = #{orderId}
</select>
</mapper>
```
4. 测试查询
在测试类中,通过订单 Mapper 接口查询订单及其对应的订单明细列表。
```java
public class Test {
public static void main(String[] args) {
String resource = "mybatis-config.xml";
InputStream inputStream = Resources.getResourceAsStream(resource);
SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
SqlSession sqlSession = sqlSessionFactory.openSession();
OrderMapper orderMapper = sqlSession.getMapper(OrderMapper.class);
Order order = orderMapper.selectOrderById(1);
System.out.println(order.getOrderNo());
for (OrderItem orderItem : order.getOrderItemList()) {
System.out.println(orderItem.getProductName());
}
sqlSession.close();
}
}
```
以上就是 MyBatis 一对多关系的 XML 配置实现过程。
阅读全文