需求背景:查询订单信息关联用户信息。
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类中。