MyBatis的一对多
假设这么一种场景,有两张表,一个user表,一个叫order的订单表,user可以拥有多个order,但order只能对应一个user。这是经典的一对多关系,本文将介绍如何用MyBatis处理这种一对多的场景。本文中的代码是在Spring Boot(三)整合Mybatis的基础上实现的。
1、增加数据库表order
use bootmybatis;
create table `order` (
`id` int auto_increment,
`name` varchar(20),
`user_id` int,
primary key(`id`)
) default charset=utf8mb4;
insert into `order` values(1, "order_1-1", 1);
insert into `order` values(2, "order_1-2", 1);
insert into `order` values(3, "order_1-3", 1);
2、增加Order类
package com.github.ralgond.bootmybatis.entity;
public class Order {
private int id;
private String name;
private int userId;
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getUserId() {
return userId;
}
public void setUserId(int userId) {
this.userId = userId;
}
@Override
public String toString() {
return "Order [id=" + id + ", name=" + name + ", userId=" + userId + "]";
}
}
3、增加UserOrderVO类
package com.github.ralgond.bootmybatis.entity;
import java.util.List;
public class UserOrderVO extends User {
private List<Order> orderList;
public List<Order> getOrderList() {
return orderList;
}
public void setOrderList(List<Order> orderList) {
this.orderList = orderList;
}
@Override
public String toString() {
return "UserOrderVO [orderList=" + orderList + ", getId()=" + getId() + ", getName()=" + getName() + "]";
}
}
4、修改UserMapper.xml
<?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.github.ralgond.bootmybatis.UserMapper">
<resultMap id="BaseResultMap" type="User">
<result column="id" jdbcType="INTEGER" property="id" />
<result column="name" jdbcType="VARCHAR" property="name" />
</resultMap>
<select id="get" resultType="User">
select * from user where id = #{id}
</select>
<resultMap type="UserOrderVO" id="UserOrderMap">
<id column="id" property="id" />
<result column="name" property="name" />
<collection property="orderList" ofType="Order">
<id column="order_id" property="id" />
<result column="order_name" property="name" />
<result column="user_id" property="userId" />
</collection>
</resultMap>
<select id="getUserOrder" resultMap="UserOrderMap">
select u.*, o.id as order_id, o.name as order_name,
o.user_id from user u
left join `order` o on u.id=o.user_id where
u.id=#{id}
</select>
</mapper>
5、修改UserMapper.java
package com.github.ralgond.bootmybatis;
import org.springframework.stereotype.Repository;
import com.github.ralgond.bootmybatis.entity.User;
import com.github.ralgond.bootmybatis.entity.UserOrderVO;
@Repository
public interface UserMapper {
public User get(int id);
public UserOrderVO getUserOrder(int id);
}
6、为service和controller增加方法
(省略)
7、启动执行


浙公网安备 33010602011771号