Mybatis多表关联查询(一对一、一对多)
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" >
<!-- column:主键在数据库中的列名 property:主键在pojo中的属性名-->
<id property="id" column="id" />
<result property="userId" column="user_id" />
<result property="number" column="number" />
<result property="createTime" column="create_time" />
<!-- association :配置一对一属性 -->
<!-- property:order里面的User属性名 -->
<!-- javaType:映射实体类型不区分大小写 -->
<association property="user" javaType="User">
<!-- id:声明主键,表示user_id是关联查询对象的唯一标识-->
<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" />
<!-- 配置一对多的关系
property:填写pojo类中集合类类属性的名称
javaType:填写集合类型的名称
-->
<collection property="orders" javaType="list" ofType="Order">
<!-- 配置主键,是关联Order的唯一标识 -->
<id property="id" column="oid" />
<result property="number" column="number" />
<result property="createTime" column="create_time" />
</collection>
</resultMap>
版权声明:本文为HuffmanTree_J原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。