需求背景:查询订单信息关联用户信息。

mapper.xml

<!DOCTYPE mapper
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.hl.mybatis.first.mapper.OrdersCustomMapper">

<!-- 定义查询订单关联查询用户ResultMap
com.hl.myabtis.first.beas.Orders将整个查询的信息映射到Order上
-->
<resultMap type="com.hl.myabtis.first.beas.Orders" id="ordersUserResultMap">
<!-- 配置Order映射信息
id:订餐结果集唯一标识
property:对应订单类属性
-->
<id column="id" property="id"/>
<result column="user_id" property="user_id"/>
<result column="number" property="number"/>
<result column="createtime" property="createtime"/>
<result column="note" property="note"/>
<!-- 配置关联属性User的映射信息
association:用于映射关联查询单个对象的信息
property:用户信息所要映射到的属性名
user:属性的全类名
-->
<association property="user" javaType="com.hl.myabtis.first.beas.User">
<!-- 关联查询用户的唯一标识
column:指定唯一标识用户信息的列
javaType:映射到User的对应属性类型
-->
<id column="user_id" javaType="java.lang.Integer"/>
<result column="username" property="username"/>
<result column="sex" property="sex"/>
<result column="address" property="address"/>
</association>
</resultMap>


<!-- 查询订单关联查询用户信息 -->
<select id="findOrdersUser" resultType="com.hl.myabtis.first.beas.OrdersCustom">
select orders.*,user.username,user.sex,user.address from orders,user where orders.user_id = user.id
</select>


<!-- 查询订单关联查询用户信息 ResultMap映射-->
<select id="findOrdersUserResultMap" resultMap="ordersUserResultMap">
select orders.*,user.username,user.sex,user.address from orders,user where orders.user_id = user.id
</select>
</mapper>

mapepr.java

package com.hl.mybatis.first.mapper;

import java.util.List;

import com.hl.myabtis.first.beas.Orders;
import com.hl.myabtis.first.beas.OrdersCustom;


public interface OrdersCustomMapper {
//查询订单关联用户信息
public List<OrdersCustom> findOrdersUser() throws Exception;
//查询订单关联用户信息ResultMap
public List<Orders> findOrdersUserResultMap() throws Exception;

}

原始订单类:

package com.hl.myabtis.first.beas;

import java.util.Date;

public class Orders {

private Integer id;

private Integer user_id;

private String number;

private Date createtime;

private String note;

//用户信息
private User user;
public Integer getId() {
return id;
}

public void setId(Integer id) {
this.id = id;
}

public Integer getUserId() {
return user_id;
}

public void setUserId(Integer userId) {
this.user_id = userId;
}

public String getNumber() {
return number;
}

public void setNumber(String number) {
this.number = number;
}

public Date getCreatetime() {
return createtime;
}

public void setCreatetime(Date createtime) {
this.createtime = createtime;
}

public String getNote() {
return note;
}

public void setNote(String note) {
this.note = note;
}
public User getUser() {
return user;
}

public void setUser(User user) {
this.user = user;
}

@Override
public String toString() {
return "Orders [id=" + id + ", user_id=" + user_id + ", number="
+ number + ", createtime=" + createtime + ", note=" + note
+ ", user=" + user + "]";
}

}

测试代码:

@Test
public void testFindOrdersUserResultMap() throws Exception{
SqlSession sqlSession = sqlSessionFactory.openSession();
OrdersCustomMapper ordersMapper = sqlSession.getMapper(OrdersCustomMapper.class);
List<Orders> list = ordersMapper.findOrdersUserResultMap();
for (Orders ordersCustom : list) {
System.out.println(ordersCustom);
}
}

对比:MyBatis一对一查询使用ResultType映射 ;不同的是将User作为一个属性存在Orders类中。