• Mybatis关联关系映射


    目录

    一、一对多关联关系

    二、多对多关联关系


    一、一对多关联关系

    首先先用逆向生成工具生成t_hibernate_order、t_hibernate_order_item

    这两张表对应的model与mapper

    Model: 

    Order:

    1. package com.zwc.ssm.model;
    2. import lombok.Data;
    3. //@Data相当于添加了set、get方法,同时添加了tostring方法
    4. //@AllArgsConstructor
    5. //@NoArgsConstructor
    6. @Data
    7. public class Order {
    8. private Integer orderId;
    9. private String orderNo;
    10. }

    OrderItem:

    1. package com.zwc.ssm.model;
    2. import lombok.ToString;
    3. @ToString
    4. public class OrderItem {
    5. private Integer orderItemId;
    6. private Integer productId;
    7. private Integer quantity;
    8. private Integer oid;
    9. public OrderItem(Integer orderItemId, Integer productId, Integer quantity, Integer oid) {
    10. this.orderItemId = orderItemId;
    11. this.productId = productId;
    12. this.quantity = quantity;
    13. this.oid = oid;
    14. }
    15. public OrderItem() {
    16. super();
    17. }
    18. public Integer getOrderItemId() {
    19. return orderItemId;
    20. }
    21. public void setOrderItemId(Integer orderItemId) {
    22. this.orderItemId = orderItemId;
    23. }
    24. public Integer getProductId() {
    25. return productId;
    26. }
    27. public void setProductId(Integer productId) {
    28. this.productId = productId;
    29. }
    30. public Integer getQuantity() {
    31. return quantity;
    32. }
    33. public void setQuantity(Integer quantity) {
    34. this.quantity = quantity;
    35. }
    36. public Integer getOid() {
    37. return oid;
    38. }
    39. public void setOid(Integer oid) {
    40. this.oid = oid;
    41. }
    42. }

    OderVo:

    1. package com.zwc.ssm.model.vo;
    2. import com.zwc.ssm.model.Order;
    3. import com.zwc.ssm.model.OrderItem;
    4. import java.util.List;
    5. /**
    6. * @authorzwc
    7. * @site www.javazwc.com
    8. * @company xxx公司
    9. * @create  2022-08-15 19:03
    10. * vo类不仅仅包含当前表信息,还能够包含相关联表的信息
    11. *
    12. * 当前订单会有一个或多个订单项,多个订单项必须要集合进行接受
    13. */
    14. public class OrderVo extends Order {
    15. // 通过订单号查询订单的详细信息及对应的所有订单项信息
    16. private List orderItems;
    17. public List getOrderItems() {
    18. return orderItems;
    19. }
    20. public void setOrderItems(List orderItems) {
    21. this.orderItems = orderItems;
    22. }
    23. }

    OrderItemVo:

    1. package com.zwc.ssm.model.vo;
    2. import com.zwc.ssm.model.Order;
    3. import com.zwc.ssm.model.OrderItem;
    4. /**
    5. * @authorzwc
    6. * @site www.javazwc.com
    7. * @company xxx公司
    8. * @create  2022-08-15 19:08
    9. *
    10. * 某一个订单项一定属于某个订单的
    11. */
    12. public class OrderItemVo extends OrderItem {
    13. private Order order;
    14. public Order getOrder() {
    15. return order;
    16. }
    17. public void setOrder(Order order) {
    18. this.order = order;
    19. }
    20. }

    OrderMapper.xml:

    OrderItemMapper.xml:

    需求一:通过订单号查询本次订单的详细信息及对应的所有订单详细

    OrderBiz:

    1. package com.zwc.ssm.biz;
    2. import com.zwc.ssm.model.Order;
    3. import com.zwc.ssm.model.vo.OrderVo;
    4. public interface OrderBiz {
    5. int deleteByPrimaryKey(Integer orderId);
    6. int insert(Order record);
    7. int insertSelective(Order record);
    8. Order selectByPrimaryKey(Integer orderId);
    9. OrderVo queryOrderVoByOrderId(Integer orderId);
    10. int updateByPrimaryKeySelective(Order record);
    11. int updateByPrimaryKey(Order record);
    12. }

     OrderBizimpl:

    1. * @authorzwc
    2. * @site www.javazwc.com
    3. * @company xxx公司
    4. * @create  2022-08-15 19:32
    5. */
    6. @Service
    7. public class OrderBizImpl implements OrderBiz {
    8. @Autowired
    9. private OrderMapper orderMapper;
    10. @Override
    11. public int deleteByPrimaryKey(Integer orderId) {
    12. return 0;
    13. }
    14. @Override
    15. public int insert(Order record) {
    16. return 0;
    17. }
    18. @Override
    19. public int insertSelective(Order record) {
    20. return 0;
    21. }
    22. @Override
    23. public Order selectByPrimaryKey(Integer orderId) {
    24. return null;
    25. }
    26. @Override
    27. public OrderVo queryOrderVoByOrderId(Integer orderId) {
    28. return orderMapper.queryOrderVoByOrderId(orderId);
    29. }
    30. @Override
    31. public int updateByPrimaryKeySelective(Order record) {
    32. return 0;
    33. }
    34. @Override
    35. public int updateByPrimaryKey(Order record) {
    36. return 0;
    37. }
    38. }

    OrderBizimplTest: 

    1. package com.zwc.ssm.biz.impl;
    2. import com.zwc.ssm.biz.OrderBiz;
    3. import org.junit.Test;
    4. import org.junit.runner.RunWith;
    5. import org.springframework.beans.factory.annotation.Autowired;
    6. import org.springframework.test.context.ContextConfiguration;
    7. import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
    8. /**
    9. * @authorzwc
    10. * @site www.javazwc.com
    11. * @company xxx公司
    12. * @create  2022-08-15 19:33
    13. */
    14. @RunWith(SpringJUnit4ClassRunner.class)
    15. @ContextConfiguration(locations={"classpath:applicationContext-mybatis.xml"})
    16. public class OrderBizImplTest {
    17. @Autowired
    18. private OrderBiz orderBiz;
    19. @Test
    20. public void queryOrderVoByOrderId() {
    21. System.out.println(orderBiz.queryOrderVoByOrderId(9));
    22. }
    23. }

    运行结果: 

    需求2:通过订单项ID查询出订单项详细信息及所属订单

    OrderitemBIz:

    1. package com.zwc.ssm.biz;
    2. import com.zwc.ssm.model.OrderItem;
    3. import com.zwc.ssm.model.vo.OrderItemVo;
    4. import org.apache.ibatis.annotations.Param;
    5. public interface OrderItemBiz {
    6. int deleteByPrimaryKey(Integer orderItemId);
    7. int insert(OrderItem record);
    8. int insertSelective(OrderItem record);
    9. OrderItem selectByPrimaryKey(Integer orderItemId);
    10. OrderItemVo queryOrderItemVoByOrderItemId(Integer orderItemId);
    11. int updateByPrimaryKeySelective(OrderItem record);
    12. int updateByPrimaryKey(OrderItem record);
    13. }

     OrderItemBizimpl:

    1. package com.zwc.ssm.biz.impl;
    2. import com.zwc.ssm.biz.OrderItemBiz;
    3. import com.zwc.ssm.mapper.OrderItemMapper;
    4. import com.zwc.ssm.model.OrderItem;
    5. import com.zwc.ssm.model.vo.OrderItemVo;
    6. import org.springframework.beans.factory.annotation.Autowired;
    7. import org.springframework.stereotype.Service;
    8. /**
    9. * @authorzwc
    10. * @site www.javazwc.com
    11. * @company xxx公司
    12. * @create  2022-08-15 20:34
    13. */
    14. @Service
    15. public class OrderItemBizImpl implements OrderItemBiz {
    16. @Autowired
    17. private OrderItemMapper orderItemMapper;
    18. @Override
    19. public int deleteByPrimaryKey(Integer orderItemId) {
    20. return 0;
    21. }
    22. @Override
    23. public int insert(OrderItem record) {
    24. return 0;
    25. }
    26. @Override
    27. public int insertSelective(OrderItem record) {
    28. return 0;
    29. }
    30. @Override
    31. public OrderItem selectByPrimaryKey(Integer orderItemId) {
    32. return null;
    33. }
    34. @Override
    35. public OrderItemVo queryOrderItemVoByOrderItemId(Integer orderItemId) {
    36. return orderItemMapper.queryOrderItemVoByOrderItemId(orderItemId);
    37. }
    38. @Override
    39. public int updateByPrimaryKeySelective(OrderItem record) {
    40. return 0;
    41. }
    42. @Override
    43. public int updateByPrimaryKey(OrderItem record) {
    44. return 0;
    45. }
    46. }

    OrderItemBizimplTest:

    1. package com.zwc.ssm.biz.impl;
    2. import com.zwc.ssm.biz.OrderItemBiz;
    3. import com.zwc.ssm.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. * @authorzwc
    11. * @site www.javazwc.com
    12. * @company xxx公司
    13. * @create  2022-08-15 21:13
    14. */
    15. @RunWith(SpringJUnit4ClassRunner.class)
    16. @ContextConfiguration(locations={"classpath:applicationContext-mybatis.xml"})
    17. public class OrderItemBizImplTest {
    18. @Autowired
    19. private OrderItemBiz orderItemBiz;
    20. @Test
    21. public void queryOrderItemVoByOrderItemId() {
    22. OrderItemVo orderItemVo = orderItemBiz.queryOrderItemVoByOrderItemId(9);
    23. System.out.println(orderItemVo);
    24. }
    25. }

    运行结果: 

     

    1. package com.zwc.ssm.biz.impl;
    2. import com.zwc.ssm.biz.OrderItemBiz;
    3. import com.zwc.ssm.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. * @authorzwc
    11. * @site www.javazwc.com
    12. * @company xxx公司
    13. * @create  2022-08-15 21:13
    14. */
    15. @RunWith(SpringJUnit4ClassRunner.class)
    16. @ContextConfiguration(locations={"classpath:applicationContext-mybatis.xml"})
    17. public class OrderItemBizImplTest {
    18. @Autowired
    19. private OrderItemBiz orderItemBiz;
    20. @Test
    21. public void queryOrderItemVoByOrderItemId() {
    22. OrderItemVo orderItemVo = orderItemBiz.queryOrderItemVoByOrderItemId(43);
    23. System.out.println(orderItemVo);
    24. //通过订单详细拿到订单
    25. System.out.println(orderItemVo.getOrder());
    26. }
    27. }

    运行结果: 

    二、多对多关联关系

    HbookCategoryMapper:

    1. <resultMap id="HbookVoMap" type="com.zwc.ssm.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.zwc.ssm.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.zwc.ssm.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.zwc.ssm.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>

    HbookMapper:

    1. package com.zwc.ssm.mapper;
    2. import com.zwc.ssm.model.Hbook;
    3. public interface HbookMapper {
    4. int deleteByPrimaryKey(Integer bookId);
    5. int insert(Hbook record);
    6. int insertSelective(Hbook record);
    7. Hbook selectByPrimaryKey(Integer bookId);
    8. int updateByPrimaryKeySelective(Hbook record);
    9. int updateByPrimaryKey(Hbook record);
    10. }
    HbookCategoryMapper:
    1. package com.zwc.ssm.mapper;
    2. import com.zwc.ssm.model.HbookCategory;
    3. import com.zwc.ssm.model.vo.CategoryVo;
    4. import com.zwc.ssm.model.vo.HbookVo;
    5. import org.apache.ibatis.annotations.Param;
    6. public interface HbookCategoryMapper {
    7. int deleteByPrimaryKey(Integer bcid);
    8. int insert(HbookCategory record);
    9. int insertSelective(HbookCategory record);
    10. HbookCategory selectByPrimaryKey(Integer bcid);
    11. int updateByPrimaryKeySelective(HbookCategory record);
    12. int updateByPrimaryKey(HbookCategory record);
    13. HbookVo queryByBookId(@Param("bookId") Integer bookId);
    14. CategoryVo queryByCid(@Param("cid") Integer cid);
    15. }
    CategoryMapper:
    1. package com.zwc.ssm.mapper;
    2. import com.zwc.ssm.model.Category;
    3. public interface CategoryMapper {
    4. int deleteByPrimaryKey(Integer categoryId);
    5. int insert(Category record);
    6. int insertSelective(Category record);
    7. Category selectByPrimaryKey(Integer categoryId);
    8. int updateByPrimaryKeySelective(Category record);
    9. int updateByPrimaryKey(Category record);
    10. }

    HbookVo:

    1. package com.zwc.ssm.model.vo;
    2. import com.zwc.ssm.model.Category;
    3. import com.zwc.ssm.model.Hbook;
    4. import java.util.List;
    5. /**
    6. * @authorzwc
    7. * @site www.javazwc.com
    8. * @company xxx公司
    9. * @create  2022-08-16 0:01
    10. */
    11. public class HbookVo extends Hbook {
    12. private List categories;
    13. public List getCategories() {
    14. return categories;
    15. }
    16. public void setCategories(List categories) {
    17. this.categories = categories;
    18. }
    19. }
    CategoryVo:
    1. package com.zwc.ssm.model.vo;
    2. import com.zwc.ssm.model.Category;
    3. import com.zwc.ssm.model.Hbook;
    4. import java.util.List;
    5. /**
    6. * @authorzwc
    7. * @site www.javazwc.com
    8. * @company xxx公司
    9. * @create  2022-08-16 0:03
    10. */
    11. public class CategoryVo extends Category {
    12. private List hbooks;
    13. public List getHbooks() {
    14. return hbooks;
    15. }
    16. public void setHbooks(List hbooks) {
    17. this.hbooks = hbooks;
    18. }
    19. }
    HbookCategoryBiz:
    1. package com.zwc.ssm.biz;
    2. import com.zwc.ssm.model.HbookCategory;
    3. import com.zwc.ssm.model.vo.CategoryVo;
    4. import com.zwc.ssm.model.vo.HbookVo;
    5. public interface HbookCategoryBiz {
    6. int deleteByPrimaryKey(Integer bcid);
    7. int insert(HbookCategory record);
    8. int insertSelective(HbookCategory record);
    9. HbookCategory selectByPrimaryKey(Integer bcid);
    10. int updateByPrimaryKeySelective(HbookCategory record);
    11. int updateByPrimaryKey(HbookCategory record);
    12. HbookVo queryByBookId(Integer bookId);
    13. CategoryVo queryByCid(Integer cid);
    14. }
    HbookCategoryBizImpl:
    1. package com.zwc.ssm.biz.impl;
    2. import com.zwc.ssm.biz.HbookCategoryBiz;
    3. import com.zwc.ssm.mapper.HbookCategoryMapper;
    4. import com.zwc.ssm.model.HbookCategory;
    5. import com.zwc.ssm.model.vo.CategoryVo;
    6. import com.zwc.ssm.model.vo.HbookVo;
    7. import org.springframework.beans.factory.annotation.Autowired;
    8. import org.springframework.stereotype.Service;
    9. /**
    10. * @authorzwc
    11. * @site www.javazwc.com
    12. * @company xxx公司
    13. * @create  2022-08-16 0:09
    14. */
    15. @Service
    16. public class HbookCategoryBizImpl implements HbookCategoryBiz {
    17. @Autowired
    18. private HbookCategoryMapper hbookCategoryMapper;
    19. @Override
    20. public int deleteByPrimaryKey(Integer bcid) {
    21. return 0;
    22. }
    23. @Override
    24. public int insert(HbookCategory record) {
    25. return 0;
    26. }
    27. @Override
    28. public int insertSelective(HbookCategory record) {
    29. return 0;
    30. }
    31. @Override
    32. public HbookCategory selectByPrimaryKey(Integer bcid) {
    33. return null;
    34. }
    35. @Override
    36. public int updateByPrimaryKeySelective(HbookCategory record) {
    37. return 0;
    38. }
    39. @Override
    40. public int updateByPrimaryKey(HbookCategory record) {
    41. return 0;
    42. }
    43. @Override
    44. public HbookVo queryByBookId(Integer bookId) {
    45. return hbookCategoryMapper.queryByBookId(bookId);
    46. }
    47. @Override
    48. public CategoryVo queryByCid(Integer cid) {
    49. return hbookCategoryMapper.queryByCid(cid);
    50. }
    51. }

     

    需求一:根据书籍ID,查询书籍信息及所属所有类别信息

    1. select * from t_hibernate_book b,t_hibernate_book_category bc,t_hibernate_category c
    2. where b.book_id = bc.bid and bc.cid = c.category_id and b.book_id = #{bookId}
    HbookCategoryBizImplTest:
    
    1. @RunWith(SpringJUnit4ClassRunner.class)
    2. @ContextConfiguration(locations={"classpath:applicationContext-mybatis.xml"})
    3. public class HbookCategoryBizImplTest {
    4. @Autowired
    5. private HbookCategoryBiz hbookCategoryBiz;
    6. @Test
    7. public void queryByBookId() {
    8. HbookVo hbookVo = hbookCategoryBiz.queryByBookId(8);
    9. System.out.println(hbookVo);
    10. hbookVo.getCategories().forEach(System.out::println);
    11. }

     运行结果

    需求二:根据类别ID,查询类别信息及所包含书籍信息 

    1. select * from t_hibernate_book b,t_hibernate_book_category bc,t_hibernate_category c
    2. where b.book_id = bc.bid and bc.cid = c.category_id and c.category_id=#{cid}
    1. package com.zwc.ssm.biz.impl;
    2. import com.zwc.ssm.biz.HbookCategoryBiz;
    3. import com.zwc.ssm.model.vo.CategoryVo;
    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. * @authorzwc
    11. * @site www.javazwc.com
    12. * @company xxx公司
    13. * @create  2022-08-16 0:11
    14. */
    15. @RunWith(SpringJUnit4ClassRunner.class)
    16. @ContextConfiguration(locations={"classpath:applicationContext-mybatis.xml"})
    17. public class HbookCategoryBizImplTest {
    18. @Autowired
    19. private HbookCategoryBiz hbookCategoryBiz;
    20. @Test
    21. public void queryByCid() {
    22. CategoryVo categoryVo = hbookCategoryBiz.queryByCid(8);
    23. System.out.println(categoryVo);
    24. categoryVo.getHbooks().forEach(System.out::println);
    25. }
    26. }

    运行结果: 

  • 相关阅读:
    adb操作及常用命令
    UDP的可靠性传输
    【外卖项目实战开发一】
    curl命令行发送post/get请求
    终于找到你!数字化时代的秘密武器
    框架安全&CVE复现&Django&Flask&Node.JS&JQuery
    SpringBoot使用git-commit-id-maven-plugin打包
    C# 支付宝小程序 ---小程序支付
    浅谈开源和闭源的认知
    【教程】视频汇聚/视频监控管理平台EasyCVR录像存储功能如何优化?具体步骤是什么?
  • 原文地址:https://blog.csdn.net/qq_65345936/article/details/126353792