关联查询

一对一

方法一:

使用resultType,定义订单信息po类,此po类中包括了订单信息和用户信息:

 

public class OrdersCustom extends Orders {
    private String username;// 用户名称
    private String address;// 用户地址
    get/set。。。。

OrdersCustom类继承Orders类后OrdersCustom类包括了Orders类的所有字段,只需要定义用户的信息字段即可。

 

sql语句的写法
<select id="findOrdersList" resultType="cn.qf.mybatis.po.OrdersCustom">
    SELECT
    orders.*,
    user.username,
    user.address
    FROM
    orders, user
    WHERE orders.user_id = user.id 
</select>

 

方法二:

使用resultMap,定义专门的resultMap用于映射一对一查询结果。

在Orders类中加入User属性,user属性中用于存储关联查询的用户信息,因为订单关联查询用户是一对一关系,所以这里使用单个User对象存储关联查询的用户信息。

XML文件

association:表示进行关联查询单条记录

property:表示关联查询的结果存储在cn.qf.mybatis.po.Orders的user属性中

javaType:表示关联查询的结果类型

autoMapping="true" : 自动映射,不需要写<result column="xxx" property="xxx"/>,注意两张表的主键名不能相同

<id property="id" column="user_id"/>:查询结果的user_id列对应关联对象的id属性,这里是<id />表示user_id是关联查询对象的唯一标识。

<result property="username" column="username"/>:查询结果的username列对应关联对象的username属性。

 

    <!-- 查询订单关联用户信息使用resultmap -->
    <resultMap type="cn.qf.po.Orders" id="orderUserResultMap">
        <id column="id" property="id"/>
        <result column="user_id" property="userId"/>
        <result column="number" property="number"/>
        <result column="createtime" property="createtime"/>
        <result column="note" property="note"/>
        <!-- 一对一关联映射 -->
        <!-- 
        property:Orders对象的user属性
        javaType:user属性对应的类型
         -->
        <association property="user" javaType="cn.qf.po.User">
            <!-- column:user表的主键对应的列  property:user对象中id属性-->
            <id column="user_id" property="id"/>
            <result column="username" property="username"/>
            <result column="address" property="address"/>
        </association>
    </resultMap>
    <select id="findOrdersWithUserResultMap" resultMap="orderUserResultMap">
        SELECT
            o.id,
            o.user_id,
            o.number,
            o.createtime,
            o.note,
            u.username,
            u.address
        FROM
            orders o
        JOIN `user` u ON u.id = o.user_id
    </select>

 

一对多

 

    <select id="selectUsersWithOrders" parameterType="long" resultMap="UsersOrdersMap">
        select * from users as u left outer join orders as o on o.uid=u.uid  where u.uid=#{uid}
    </select>
 
    <resultMap type="user" id="UsersOrdersMap" extends="userResultMap">
        <!-- 配置关联集合 
            ofType:集合中的泛型的类型
        -->
        <collection property="orders" ofType="order" resultMap="orderResultMap"></collection>
    </resultMap>

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值