MyBatis6-一对一查询
2017-03-18 本文已影响21人
我相信你爱过gg
使用resultType
从需求上,首先确定查询的主表,再确定查询的关联表.
第一步 写查询语句
SELECT
o.*,
u.user_name
FROM
Orders as o
INNER JOIN
Users as u
ON o.user_id = u.user_id
第二步 创建POJO
我们现在有两个POJO,第一个是Order,第二个是User;分别对应Orders和Users.
我们现在是连表查询,查询出来的结果集,我们可以看成一张表,所以要创建对应的POJO.
注:不能修改已有的两个POJO.我们要继承Order,来添加Users表查询出来的字段.
public class OderCustom extends Order {
private String userName;
}
第三步 创建mapper.xml
<mapper namespace="cc.ibadboy.mybatis.mapper.OrderCustom">
<select id="findOrderUser" resultType="cc.ibadboy.mybatis.entity.Order">
SELECT
o.*,
u.user_name
FROM
Orders as o
INNER JOIN
Users as u
ON o.user_id = u.user_id
</select>
</mapper>
剩下的就是创建接口与调试.
resultMap
使用resultMap讲查询结果中的订单信息映射到Order对象中,在Order类中添加User属性,讲关联查询出来的用户信息映射到Order对象中的User属性中.
第一步 创建SQL语句与resultType一样
第二步 创建修改Order 类
public class OderCustom extends Order {
private int orderId;
private User user;
}
第三步 创建mapper.xml
<mapper namespace="cc.ibadboy.mybatis.mapper.OrderCustom">
<!-- 订单查询关联用户的信息
type:映射到Order对象中
-->
<resultMap id="findOrderUser" type="cc.ibadboy.mybatis.entity.Order">
<!-- 配置映射的订单信息 -->
<id column="id" property="orderid" /><!-- Orders表中的主键,如果多个字段组成主键,就配置多个id标签 -->
<result column="user_Id" property="userId"/><!-- Orders表其它字段与Order类中的属性进行映射 -->
<!-- 配置映射的关联用户信息
association: 映射关联查询的单个用户信息
property: 将关联查询出来的信息映射到Order对象中的哪个属性.
javaType: 指定Order对象的user属性的属性类型.
-->
<association property="user" javaType="cc.ibadboy.mybatis.entity.User">
<!-- 关联查询用户的唯一标识
column: Orders表的外键.
property: 映射到User对象的那个属性.
-->
<id column="user_id" property="userId"/>
<result column="" property=""/><!-- 这些和上面一样,就是将其它字段映射与User属性映射 -->
</association>
</resultMap>
<select id="findOrderUser" resultType="findOrderUser">
SELECT
o.*,
u.user_name
FROM
Orders as o
INNER JOIN
Users as u
ON o.user_id = u.user_id
</select>
</mapper>
resultType和resultMap小结
resultType: 实现比较简单,只要保证属性和字段对应就可以.
resultMap: 需要单独定义resultMap,如果对查询结果有特殊要求,比如延迟加载.