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,如果对查询结果有特殊要求,比如延迟加载.

上一篇下一篇

猜你喜欢

热点阅读