mybatis一对多多对一的映射关系

一.一对多

一.用逆向工程生成实体类/mapper接口/mapper.xml
generatorConfig.xml
在这里插入图片描述
用的是订单和订单项来来表示一对多和多对一的关系
目标
传入订单id查询到订单本身以及订单本身所对应的所有订单项
传入订单项id查询到订单项本身以及订单项本身所对应的订单

二.建vo类

但是订单和订单实体类里面并没有这么多字段所以我们需要建一个vo类

订单里面包含了订单id和订单名称但是没有订单所对应的订单详细信息
所以新建订单的vo类
继承订单类
有一个订单项的集合的属性
因为一个订单对应多个订单项

反之订单项里面有订单项的详细信息但是没有它所对应订单
所以给订单项表也建一个vo类
继承订单项属性
有一个订单的属性

三.mapper配置文件

id:下面查询语句的对应映射关系
type:返回对象的类别
property:实体类字段
column:表对应的字段
<collecyion表示一对多的标签
property: 指的是集合属性的值, ofType:指的是集合中元素的类型

<association 表示多对一的标签
property: 指的是集合属性的值, ofType:指的是集合中元素的类型

OrderMapper.xml

<resultMap id="OrderVoMap" type="com.javaxl.ssm.model.vo.OrderVo" >
  <result property="orderId" column="order_id"></result>
  <result property="orderNo" column="order_no"></result>
  <collection property="orderItems" ofType="com.javaxl.ssm.model.OrderItem">
    <result property="orderItemId" column="order_item_id"></result>
    <result property="oid" column="oid"></result>
    <result property="productId" column="product_id"></result>
    <result property="quantity" column="quantity"></result>
  </collection>
</resultMap>

<select id="queryOrderVoByOrderId" resultMap="OrderVoMap" parameterType="java.lang.Integer">
   select * from t_hibernate_order o,t_hibernate_order_item oi
    where o.order_id = oi.oid
    and o.order_id = #{orderId}
</select>

OrderOItemMapper.xml

<resultMap id="OrderVoMap" type="com.javaxl.ssm.model.vo.OrderItemVo" >
  <result property="orderItemId" column="order_item_id"></result>
  <result property="oid" column="oid"></result>
  <result property="productId" column="product_id"></result>
  <result property="quantity" column="quantity"></result>
  <association property="order" javaType="com.javaxl.ssm.model.Order">
    <result property="orderId" column="order_id"></result>
    <result property="orderNo" column="order_no"></result>
  </association>
</resultMap>

<select id="queryOrderItemVoByOrderItemId" resultMap="OrderVoMap" parameterType="java.lang.Integer">
   select * from t_hibernate_order o,t_hibernate_order_item oi
    where o.order_id = oi.oid
    and oi.order_item_id = #{orderItemId}
</select>

测试

在这里插入图片描述

在这里插入图片描述

多对多

多对一就是两个多对一
这里用书籍和书籍类别来做例子
一本书对应多个书籍类别
一个类别又对应多本书

还是建vo类
在这里插入图片描述
HbookCategoryMapper.xml

<resultMap id="HbookVoMap" type="com.javaxl.ssm.model.vo.HbookVo">
    <result property="bookId" column="book_id"></result>
    <result property="bookName" column="book_name"></result>
    <collection property="categories" ofType="com.javaxl.ssm.model.Category">
        <result property="categoryId" column="category_id"></result>
        <result property="categoryName" column="category_name"></result>
    </collection>
</resultMap>

<resultMap id="CategoryVoMap" type="com.javaxl.ssm.model.vo.CategoryVo">
    <result property="categoryId" column="category_id"></result>
    <result property="categoryName" column="category_name"></result>
    <collection property="hbooks" ofType="com.javaxl.ssm.model.Hbook">
        <result property="bookId" column="book_id"></result>
        <result property="bookName" column="book_name"></result>
    </collection>
</resultMap>

  <select id="queryByBookId" resultMap="HbookVoMap" parameterType="java.lang.Integer">
select * from t_hibernate_book b,t_hibernate_book_category bc,t_hibernate_category c
     where b.book_id = bc.bid and bc.cid = c.category_id and b.book_id = #{bookId}
 </select>
   <select id="queryByCid" resultMap="CategoryVoMap" parameterType="java.lang.Integer">
select * from t_hibernate_book b,t_hibernate_book_category bc,t_hibernate_category c
     where b.book_id = bc.bid and bc.cid = c.category_id and c.category_id=#{cid}
   </select>

测试
在这里插入图片描述
在这里插入图片描述

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值