美文网首页
MyBatis6-一对一查询

MyBatis6-一对一查询

作者: 我相信你爱过gg | 来源:发表于2017-03-18 22:48 被阅读21次

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

    相关文章

      网友评论

          本文标题:MyBatis6-一对一查询

          本文链接:https://www.haomeiwen.com/subject/zdcpnttx.html