Mybatis————关联表,多表查询

当前查询的实体类中包含另外一个实体类 

一对一

public class Orders {
        //订单ID
        private int id;
        //用户ID
        private int userId;
        //订单数量
        private String number;
        //和用户表构成一对一的关系,即一个订单只能由一个用户创建
        private User user;
}
 <!-- 
        嵌套结果:使用嵌套结果映射来处理重复的联合结果的子集
                                   封装联表查询的数据(去除重复的数据)
         select * from orders o,user u where o.user_id=u.id and o.id=#{id}
         -->
        <select id="selectOrderAndUserByOrderID" resultMap="getOrderAndUser">
            select * from orders o,user u where o.user_id=u.id and o.id=#{id}
        </select>
        <resultMap type="com.ys.po.Orders" id="getOrderAndUser">
            <!--
                id:指定查询列表唯一标识,如果有多个唯一标识,则配置多个id
                column:数据库对应的列
                property:实体类对应的属性名
              -->
            <id column="id" property="id"/>
            <result column="user_id" property="userId"/>
            <result column="number" property="number"/>
            <!--association:用于映射关联查询单个对象的信息
                property:实体类对应的属性名
                javaType:实体类对应的全类名
              -->
            <association property="user" javaType="com.ys.po.User">
                <!--
                    id:指定查询列表唯一标识,如果有多个唯一标识,则配置多个id
                    column:数据库对应的列
                    property:实体类对应的属性名
                  -->
                <id column="id" property="id"/>
                <result column="username" property="username"/>
                <result column="sex" property="sex"/>
            </association>
        </resultMap>

 一对多 

<!-- 
        方式一:嵌套结果:使用嵌套结果映射来处理重复的联合结果的子集
                                   封装联表查询的数据(去除重复的数据)
         select * from user u,orders o where u.id=o.user_id and u.id=#{id}
         -->
        <select id="selectUserAndOrdersByUserId" resultMap="getUserAndOrders">
            select u.*,o.id oid,o.number number from user u,orders o where u.id=o.user_id and u.id=#{id}
        </select>
        <resultMap type="com.ys.po.User" id="getUserAndOrders">
            <!--id:指定查询列表唯一标识,如果有多个唯一标识,则配置多个id
                column:数据库对应的列
                property:实体类对应的属性名 -->
            <id column="id" property="id"/>
            <result column="username" property="username"/>
            <result column="sex" property="sex"/>
            <!--
                property:实体类中定义的属性名
                ofType:指定映射到集合中的全类名
              -->
            <collection property="orders" ofType="com.ys.po.Orders">
                <id column="oid" property="id"/>
                <result column="number" property="number"/>
            </collection>
        </resultMap>

 多对多

User 下面有一个rolesList

Role下面有一个userList

user_role  为一个 关联表,保存了user_id与role_id

 

<mapper namespace="many.to.many.mapper.UserMapper">

        <select id="getUserByRoleId" resultMap="getUserMap">
            select * from user_role ur,user u where ur.user_id=u.id and ur.role_id=#{id} 
        </select>

        <resultMap type="com.ys.po.User" id="getUserMap">
            <id column="id" property="id"/>
            <result column="username" property="username"/>
            <result column="sex" property="sex"/>
        </resultMap>
    </mapper>

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值