• MyBatis04(关联关系映射)


    前言

    上一篇文章分享了Mybatis与Spring的集成。本片文章将分享mybatis的关联关系映射。


            

    本次内容将通过案例讲解

    一、一对多

     一对多:就类似于我们在tb买东西,一次性卖了很多东西,一个订单有很多的订单项。

           

     

            1、首先我们通过逆向生成工具 生成我们将要用到的内容。生成上图两张表。

            2、建立对应的对象视图。

            OrderVo

    1. package com.zhw.model.vo;
    2. import com.zhw.model.Order;
    3. import com.zhw.model.OrderItem;
    4. import java.util.List;
    5. /**
    6. * @author louis
    7. * @create  2022-08-15 18:25
    8. *
    9. * 不仅仅包含当前表的信息,还能包含相关联的表的信息。
    10. */
    11. public class OrderVo extends Order {
    12. // 通过订单号查询本次订单的详细信息以及对应的所有订单项信息
    13. private List orderItems;
    14. public List getOrderItems() {
    15. return orderItems;
    16. }
    17. public void setOrderItems(List orderItems) {
    18. this.orderItems = orderItems;
    19. }
    20. }

            OrderItemVo

    1. package com.zhw.model.vo;
    2. import com.zhw.model.Order;
    3. import com.zhw.model.OrderItem;
    4. import lombok.Data;
    5. /**
    6. * @author louis
    7. * @create  2022-08-15 18:25
    8. */
    9. @Data
    10. public class OrderItemVo extends OrderItem {
    11. private Order order;
    12. public Order getOrder() {
    13. return order;
    14. }
    15. public void setOrder(Order order) {
    16. this.order = order;
    17. }
    18. }

            3、配置对应的xml文件

    1. <resultMap id="OrderVoMap" type="com.zhw.model.vo.OrderVo">
    2. <result column="order_id" property="orderId">result>
    3. <result column="order_no" property="orderNo">result>
    4. <collection property="orderItems" ofType="com.zhw.model.OrderItem">
    5. <result column="order_item_id" property="orderItemId">result>
    6. <result column="product_id" property="productId">result>
    7. <result column="quantity" property="quantity">result>
    8. <result column="oid" property="oid">result>
    9. collection>
    10. resultMap>

     

    1. <resultMap id="OrderItemVoMap" type="com.zhw.model.vo.OrderItemVo">
    2. <result column="order_item_id" property="orderItemId">result>
    3. <result column="product_id" property="productId">result>
    4. <result column="quantity" property="quantity">result>
    5. <result column="oid" property="oid">result>
    6. <association property="order" javaType="com.zhw.model.Order">
    7. <result column="order_id" property="orderId">result>
    8. <result column="order_no" property="orderNo">result>
    9. association>
    10. resultMap>

     写注解

    OrderBizImpl

    1. package com.zhw.biz.impl;
    2. import com.zhw.biz.OrderBiz;
    3. import com.zhw.mapper.OrderMapper;
    4. import com.zhw.model.Order;
    5. import com.zhw.model.vo.OrderVo;
    6. import org.springframework.beans.factory.annotation.Autowired;
    7. import org.springframework.stereotype.Service;
    8. /**
    9. * @author louis
    10. * @create  2022-08-15 19:18
    11. */
    12. @Service
    13. public class OrderBizImpl implements OrderBiz {
    14. @Autowired
    15. private OrderMapper orderMapper;
    16. @Override
    17. @Override
    18. public OrderVo queryOrderVoByOrderId(Integer orderId) {
    19. return orderMapper.queryOrderVoByOrderId(orderId);
    20. }
    21. }

    OrderItemBizImpl

     

    1. package com.zhw.biz.impl;
    2. import com.zhw.biz.OrderItemBiz;
    3. import com.zhw.mapper.OrderItemMapper;
    4. import com.zhw.model.OrderItem;
    5. import com.zhw.model.vo.OrderItemVo;
    6. import org.springframework.beans.factory.annotation.Autowired;
    7. import org.springframework.stereotype.Service;
    8. /**
    9. * @author louis
    10. * @create  2022-08-15 20:06
    11. */
    12. @Service
    13. public class OrderItemBizImpl implements OrderItemBiz {
    14. @Autowired
    15. private OrderItemMapper orderItemMapper;
    16. @Override
    17. public OrderItemVo queryOrderItemVoByOrderItemId(Integer orderItemId) {
    18. return orderItemMapper.queryOrderItemVoByOrderItemId(orderItemId);
    19. }
    20. }

     测试类

    OrderBizImplTest

    1. package com.zhw.biz.impl;
    2. import com.zhw.biz.OrderBiz;
    3. import com.zhw.model.vo.OrderVo;
    4. import org.junit.Test;
    5. import org.junit.runner.RunWith;
    6. import org.springframework.beans.factory.annotation.Autowired;
    7. import org.springframework.test.context.ContextConfiguration;
    8. import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
    9. /**
    10. * @author louis
    11. * @create  2022-08-15 19:41
    12. */
    13. @RunWith(SpringJUnit4ClassRunner.class)
    14. @ContextConfiguration(locations={"classpath:applicationContext-mybatis.xml"})
    15. public class OrderBizImplTest {
    16. @Autowired
    17. private OrderBiz orderBiz;
    18. @Test
    19. public void queryOrderVoByOrderId() {
    20. OrderVo orderVo = orderBiz.queryOrderVoByOrderId(9);
    21. System.out.println(orderVo);
    22. }
    23. }

    效果展示

      

     OrderItemBizImplTest

    1. package com.zhw.biz.impl;
    2. import com.zhw.biz.OrderItemBiz;
    3. import com.zhw.model.vo.OrderItemVo;
    4. import org.junit.Test;
    5. import org.junit.runner.RunWith;
    6. import org.springframework.beans.factory.annotation.Autowired;
    7. import org.springframework.test.context.ContextConfiguration;
    8. import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
    9. /**
    10. * @author louis
    11. * @create  2022-08-15 20:11
    12. */
    13. @RunWith(SpringJUnit4ClassRunner.class)
    14. @ContextConfiguration(locations={"classpath:applicationContext-mybatis.xml"})
    15. public class OrderItemBizImplTest {
    16. @Autowired
    17. private OrderItemBiz orderItemBiz;
    18. @Test
    19. public void queryOrderItemVoByOrderItemId() {
    20. OrderItemVo orderItemVo = orderItemBiz.queryOrderItemVoByOrderItemId(43);
    21. System.out.println(orderItemVo);
    22. System.out.println(orderItemVo.getOrder());
    23. }
    24. }

    效果展示

     

    二、多对多

    多对多相当于两个一对多

    多对多:相当于书籍分类,一本书可以属于多个分类,一个分类里面可以有多本书。

            

    1. <resultMap id="HbookVoMap" type="com.zhw.model.vo.HbookVo">
    2. <result property="bookId" column="book_id">result>
    3. <result property="bookName" column="book_name">result>
    4. <collection property="categories" ofType="com.zhw.model.Category">
    5. <result property="categoryId" column="category_id">result>
    6. <result property="categoryName" column="category_name">result>
    7. collection>
    8. resultMap>
    9. <resultMap id="CategoryVoMap" type="com.zhw.model.vo.CategoryVo">
    10. <result property="categoryId" column="category_id">result>
    11. <result property="categoryName" column="category_name">result>
    12. <collection property="hbooks" ofType="com.zhw.model.Hbook">
    13. <result property="bookId" column="book_id">result>
    14. <result property="bookName" column="book_name">result>
    15. collection>
    16. resultMap>
    17. <select id="queryByBookId" resultMap="HbookVoMap" parameterType="java.lang.Integer">
    18. select * from t_hibernate_book b,t_hibernate_book_category bc,t_hibernate_category c
    19. where b.book_id = bc.bid and bc.cid = c.category_id and b.book_id = #{bookId}
    20. select>
    21. <select id="queryByCid" resultMap="CategoryVoMap" parameterType="java.lang.Integer">
    22. select * from t_hibernate_book b,t_hibernate_book_category bc,t_hibernate_category c
    23. where b.book_id = bc.bid and bc.cid = c.category_id and c.category_id=#{cid}
    24. select>

    HbookCategoryBizImpl

    1. package com.zhw.biz.impl;
    2. import com.zhw.biz.HbookCategoryBiz;
    3. import com.zhw.mapper.HbookCategoryMapper;
    4. import com.zhw.model.HbookCategory;
    5. import com.zhw.model.vo.CategoryVo;
    6. import com.zhw.model.vo.HbookVo;
    7. import org.springframework.beans.factory.annotation.Autowired;
    8. import org.springframework.stereotype.Service;
    9. /**
    10. * @author louis
    11. * @create  2022-08-15 20:30
    12. */
    13. @Service
    14. public class HbookCategoryBizImpl implements HbookCategoryBiz {
    15. @Autowired
    16. private HbookCategoryMapper hbookCategoryMapper;
    17. @Override
    18. public CategoryVo queryByCid(Integer cid) {
    19. return hbookCategoryMapper.queryByCid(cid);
    20. }
    21. @Override
    22. public HbookVo queryByBookId(Integer bookId) {
    23. return hbookCategoryMapper.queryByBookId(bookId);
    24. }
    25. }

    HbookCategoryBizImplTest

    1. package com.zhw.biz.impl;
    2. import com.zhw.biz.HbookCategoryBiz;
    3. import com.zhw.model.vo.CategoryVo;
    4. import com.zhw.model.vo.HbookVo;
    5. import org.junit.Test;
    6. import org.junit.runner.RunWith;
    7. import org.springframework.beans.factory.annotation.Autowired;
    8. import org.springframework.test.context.ContextConfiguration;
    9. import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
    10. /**
    11. * @author louis
    12. * @create  2022-08-15 20:33
    13. */
    14. @RunWith(SpringJUnit4ClassRunner.class)
    15. @ContextConfiguration(locations={"classpath:applicationContext-mybatis.xml"})
    16. public class HbookCategoryBizImplTest {
    17. @Autowired
    18. private HbookCategoryBiz hbookCategoryBiz;
    19. @Test
    20. public void queryByCid() {
    21. CategoryVo categoryVo = hbookCategoryBiz.queryByCid(8);
    22. System.out.println(categoryVo);
    23. categoryVo.getHbooks().forEach(System.out::println);
    24. }
    25. @Test
    26. public void queryByBookId() {
    27. HbookVo hbookVo = hbookCategoryBiz.queryByBookId(8);
    28. System.out.println(hbookVo);
    29. hbookVo.getCategories().forEach(System.out::println);
    30. }
    31. }

    效果展示

     

     

  • 相关阅读:
    社区投稿| 以安全视角,深度剖析 Sui Staking 与 LSD
    网络安全(黑客)自学
    linux傻瓜式安装Java环境及中间件
    东南电子开启申购:客户集中度较高,预计上市时市值约18亿元
    数据结构之手写HashMap
    蓝桥杯算法竞赛系列第九章·巧解哈希题,用这3种数据类型足矣
    CEC2013(MATLAB):猎豹优化算法(The Cheetah Optimizer,CO)求解CEC2013
    图片如何去雾?这些方法值得收藏
    数学建模学习(100):交通运输问题建模
    IT创业项目-赚钱项目-网赚项目:月入2W+的视频号创业项目
  • 原文地址:https://blog.csdn.net/qq_62331938/article/details/126354695