mapper一对多映射的三种方法

一对多映射的返回值是集合

三种方法:

第一: 直接一对多 查询方式为关系查询关键字为collection

collection 的类型是ofType

<select id="userAndAdress2" resultMap="userAndAdressMap" parameterType="int">
        select u.id, u.userName,u.phone,a.addressDesc,a.userId
        from smbms_user u,smbms_address a where u.id=a.userId and u.id=#{id}
    </select>
    <resultMap id="userAndAdressMap" type="cn.cmbms.pojo.User">
        <id property="id"  column="id"></id>
        <result property="userName" column="userName"></result>
        <result property="phone" column="phone"></result>
        <collection property="addresses" ofType="Address">
            <result  property="addressDesc"  column="addressDesc"></result>
            <result  property="userId"  column="userId"></result>
        </collection>
    </resultMap>

第二个:创建一个新的实体类去接收返回的参数

<select id="userAndAdress" resultType="UserAndAddress" parameterType="int">
        select u.id, u.userName,u.phone,a.addressDesc
        from smbms_user u,smbms_address a where u.id=a.userId and u.id=#{id}
    </select>

 

第三中方法:采用子查询的方法建立关系映射 需要用到select 关键字

先查询主表的需要和从表连接的字段

如:(一个用户多个订单)

主表为用户表

从表为订单表

从用户表中查询将用户表的id作为参数传到从表的订单表

<select id="userAndAdress3" resultMap="userAndAdressMap3" parameterType="int">
        select *
        from smbms_user u  where  u.id=#{id}
    </select>

    <resultMap id="userAndAdressMap3" type="cn.cmbms.pojo.User">
        <id property="id"  column="id"></id>
        <result property="userName" column="userName"></result>
        <result property="phone" column="phone"></result>
        <collection property="addresses" column="id" ofType="Address"  **select=**"cn.cmbms.dao.user.AddressMapper.findAddressByUid">
            <result  property="addressDesc"  column="addressDesc"></result>
        </collection>
    </resultMap>

cn.cmbms.dao.user.AddressMapper.findAddressByUid:

<mapper  namespace="cn.cmbms.dao.user.AddressMapper">
    <select id="findAddressByUid" parameterType="int"  resultType="Address">
        select  *   from  smbms_address  where  userId=#{uid}
    </select>
</mapper>
  • 3
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
mapper中进行一对多和多对多的SQL映射,可以使用MyBatis的关联查询功能。 一对多查询可以使用MyBatis的collection标签,示例代码如下: ``` <select id="selectOrderAndOrderDetailByOrderId" resultMap="orderDetailResultMap"> SELECT * FROM orders WHERE order_id = #{orderId} </select> <resultMap id="orderDetailResultMap" type="Order"> <id property="id" column="order_id"/> <result property="orderNo" column="order_no"/> <collection property="orderDetails" ofType="OrderDetail"> <id property="id" column="detail_id"/> <result property="productName" column="product_name"/> <result property="productPrice" column="product_price"/> </collection> </resultMap> ``` 多对多查询可以使用MyBatis的association标签,示例代码如下: ``` <select id="selectUserAndRoleByUserId" resultMap="userResultMap"> SELECT * FROM user WHERE user_id = #{userId} </select> <resultMap id="userResultMap" type="User"> <id property="id" column="user_id"/> <result property="username" column="username"/> <association property="roles" column="role_id" javaType="java.util.List" select="selectRoleByUserId"/> </resultMap> <select id="selectRoleByUserId" resultMap="roleResultMap"> SELECT r.* FROM user_role ur JOIN role r ON ur.role_id = r.role_id WHERE ur.user_id = #{userId} </select> <resultMap id="roleResultMap" type="Role"> <id property="id" column="role_id"/> <result property="name" column="role_name"/> </resultMap> ``` 以上示例代码仅供参考,具体的SQL语句和映射配置需要根据实际需求进行调整。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值