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、启动执行

posted @ 2020-12-20 15:01  ralgo  阅读(295)  评论(0)    收藏  举报