Mybatis多表关联查询(一对一、一对多)

Mybatis多表关联查询(一对一、一对多)

    • 1. 使用resultMap一对一关联查询
    • 2. 使用resultMap一对多关联查询

resultMap可以实现将查询结果映射为复杂类型的pojo,比如在查询结果映射对象中包括pojo和list实现一对一查询和一对多查询。单纯地映射不同的字段和属性名,可以看我上一篇文章中的内容。

1. 使用resultMap一对一关联查询

查询订单以及该订单的用户信息:

在orders类中添加User属性,将关联查询出来的用户信息映射到orders对象中的user属性中。
entity类:

public class Order{
	//订单id
	private Integer id;
	//用户id
	private Integer userId
	//订单号
	private Integer number;
	//创建时间
	private Date creatTime;
	//*用户,User属性是一个引用类型,用于存储关联查询的用户信息
	private User user;
}
public class User{
	//用户id
	private Integer id;
	//用户姓名
	private String userName;
	//用户地址
	private String address;
}

配置Mapper.xml配置文件
OrderMapper.xml
先使用id和result属性,映射order类的结果集,然后在使用association映射关联对象User的结果集

<select id="queryOrderUserResultMap" resultMap="orderUserResultMap">
    SELECT
    o.id,
    o.user_id,
    o.number,
    o.create_time,
    u.username,
    u.address
    FROM
    `order` o
    LEFT JOIN `user` u ON o.userId = u.id
select>
<resultMap id="orderUserResultMap" type="order" >
	
    <id property="id" column="id" />
    <result property="userId" column="user_id" />
    <result property="number" column="number" />
    <result property="createTime" column="create_time" />
    
    
        
    <association property="user" javaType="User">
        
        <id property="id" column="user_id" />
        <result property="user_name" column="userName" />
        <result property="address" column="address" />
    association>
resultMap>

2. 使用resultMap一对多关联查询

一个用户可以有多个订单,查询所有用户信息及相关订单信息:
修改entity类:

public class User{
	//用户id
	private Integer id;
	//用户姓名
	private String userName;
	//用户地址
	private String address;
	//该用户的所有订单信息
	private List<Order> orders;
}

修改UserMapper.xml配置文件
先使用id和resultMap配置映射User类的结果,然后使用一对多关系的collection标签配置Order结果


<select id="queryUserOrder" resultMap="userOrderResultMap">
    SELECT
    u.id,
    u.username,
    u.address,
    o.id oid,
    o.number,
    o.createtime,
    FROM
    `user` u
    LEFT JOIN `order` o ON u.id = o.user_id
select>

<resultMap type="user" id="userOrderResultMap">
    <id property="id" column="id" />
    <result property="userName" column="user_name" />
    <result property="address" column="address" />
    
    <collection property="orders" javaType="list" ofType="Order">
        
        <id property="id" column="oid" />
        <result property="number" column="number" />
        <result property="createTime" column="create_time" />
    collection>
resultMap>

你可能感兴趣的:(数据库)