• Mybatis04关联关系映射


    目录

    一、一对多关联关系

    二、多对多关联关系


    一、一对多关联关系

    1、首先先用逆向生成工具生成t_hibernate_order、t_hibernate_order_item这两张表对应的model与mapper

    1. <table schema="" tableName="t_hibernate_order" domainObjectName="Order"
    2. enableCountByExample="false" enableDeleteByExample="false"
    3. enableSelectByExample="false" enableUpdateByExample="false">
    4. table>
    5. <table schema="" tableName="t_hibernate_order_item" domainObjectName="OrderItem"
    6. enableCountByExample="false" enableDeleteByExample="false"
    7. enableSelectByExample="false" enableUpdateByExample="false">
    8. table>

    2、 编写一对多一方面OrderMapper.xml配置文件

    1. "1.0" encoding="UTF-8" ?>
    2. mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd" >
    3. <mapper namespace="com.zq.ssm.mapper.OrderMapper" >
    4. <resultMap id="BaseResultMap" type="com.zq.ssm.model.Order" >
    5. <constructor >
    6. <arg column="order_id" jdbcType="VARCHAR" javaType="java.lang.String" />
    7. <arg column="order_no" jdbcType="VARCHAR" javaType="java.lang.String" />
    8. constructor>
    9. resultMap>
    10. <resultMap id="OrdervVoMap" type="com.zq.ssm.model.vo.OrdervVo" >
    11. <result column="order_id" property="orderId">result>
    12. <result column="order_no" property="orderNo">result>
    13. <collection property="orderItems" ofType="com.zking.ssm.model.OrderItem">
    14. <result column="order_item_id" property="orderItemId">result>
    15. <result column="product_id" property="productId">result>
    16. <result column="quantity" property="quantity">result>
    17. <result column="oid" property="oid">result>
    18. collection>
    19. resultMap>
    20. <insert id="insert" parameterType="com.zq.ssm.model.Order" >
    21. insert into t_hibernate_order (order_id, order_no)
    22. values (#{orderId,jdbcType=VARCHAR}, #{orderNo,jdbcType=VARCHAR})
    23. insert>
    24. <select id="queryOrderVoByOrderId" resultMap="OrdervVoMap" parameterType="java.lang.Integer">
    25. select * from t_hibernate_order o,t_hibernate_order_item oi
    26. where o.order_id = oi.oid
    27. and o.order_id = #{orderId}
    28. select>
    29. <insert id="insertSelective" parameterType="com.zq.ssm.model.Order" >
    30. insert into t_hibernate_order
    31. <trim prefix="(" suffix=")" suffixOverrides="," >
    32. <if test="orderId != null" >
    33. order_id,
    34. if>
    35. <if test="orderNo != null" >
    36. order_no,
    37. if>
    38. trim>
    39. <trim prefix="values (" suffix=")" suffixOverrides="," >
    40. <if test="orderId != null" >
    41. #{orderId,jdbcType=VARCHAR},
    42. if>
    43. <if test="orderNo != null" >
    44. #{orderNo,jdbcType=VARCHAR},
    45. if>
    46. trim>
    47. insert>
    48. mapper>

    3、创建vo类(包含关联表的信息)

    1. package com.zq.ssm.model.vo;
    2. import com.zq.ssm.model.Order;
    3. import com.zq.ssm.model.OrderItem;
    4. import java.util.List;
    5. /**
    6. * @author张强
    7. * @site www.zq.com
    8. * @create  2022-08-16 12:49
    9. */
    10. public class OrderVo extends Order {
    11. //通过订单号查询本次订单的详细信息及对应的所有订单项信息
    12. private List orderItems;
    13. public List getOrderItems() {
    14. return orderItems;
    15. }
    16. public void setOrderItems(List orderItems) {
    17. this.orderItems = orderItems;
    18. }
    19. }
    1. package com.zq.ssm.model.vo;
    2. import com.zq.ssm.model.Order;
    3. import com.zq.ssm.model.OrderItem;
    4. /**
    5. * @author张强
    6. * @site www.zq.com
    7. * @create  2022-08-16 12:51
    8. */
    9. public class OrderItemVo extends OrderItem {
    10. private Order order;
    11. public Order getOrder() {
    12. return order;
    13. }
    14. public void setOrder(Order order) {
    15. this.order = order;
    16. }
    17. }

    实体类添加注解@Data(相当于添加了set/get方法,同时添加了tostring方法)

    1. package com.zq.ssm.model;
    2. import lombok.Data;
    3. @Data
    4. public class Order {
    5. private String orderId;
    6. private String orderNo;
    7. }

     OrderItem也是如此

    4、在biz、impl里都添加方法

    1. package com.zq.ssm.biz;
    2. import com.zq.ssm.model.Order;
    3. import com.zq.ssm.model.vo.OrderVo;
    4. public interface OrderBiz {
    5. int insert(Order record);
    6. int insertSelective(Order record);
    7. OrderVo queryOrderVoByOrderId( Integer orderId);
    8. }
    1. package com.zq.ssm.biz.impl;
    2. import com.zq.ssm.biz.OrderBiz;
    3. import com.zq.ssm.mapper.OrderMapper;
    4. import com.zq.ssm.model.Order;
    5. import com.zq.ssm.model.vo.OrderVo;
    6. import org.springframework.beans.factory.annotation.Autowired;
    7. import org.springframework.stereotype.Service;
    8. @Service
    9. public class OrderBizImpl implements OrderBiz {
    10. @Autowired
    11. private OrderMapper orderMapper;
    12. @Override
    13. public int insert(Order record) {
    14. return 0;
    15. }
    16. @Override
    17. public int insertSelective(Order record) {
    18. return 0;
    19. }
    20. @Override
    21. public OrderVo queryOrderVoByOrderId(Integer orderId) {
    22. return orderMapper.queryOrderVoByOrderId(orderId);
    23. }
    24. }

     5、创建测试类

    1. package com.zq.ssm;
    2. import com.zq.ssm.biz.OrderBiz;
    3. import com.zq.ssm.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张强
    11. * @site www.zq.com
    12. * @create  2022-08-16 13:03
    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. OrderVo order = orderBiz.queryOrderVoByOrderId(9);
    22. System.out.println(order);
    23. order.getOrderItems().forEach(System.out::println);
    24. }
    25. }

            这样的话便可测试了,接下啦我们实现另外一方的测试

    6、 编写OrderItem.xml方面的文件

    1. <resultMap id="OrderItemVoMap" type="com.zq.ssm.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.zq.ssm.model.Order">
    7. <result column="order_id" property="orderId">result>
    8. <result column="order_no" property="orderNo">result>
    9. association>
    10. resultMap>
    11. <select id="queryOrderItemVoByOrderItemId" resultMap="OrderItemVoMap" parameterType="java.lang.Integer">
    12. select * from t_hibernate_order o,t_hibernate_order_item oi
    13. where o.order_id = oi.oid
    14. and oi.order_item_id = #{orderItemId}
    15. select>

    接下来的步骤和上面的一样只是这里的配置文件不一样而已,所以我们便可以啦! 

    二、多对多关联关系

    1、理论:多对多的核心就是两个一对多

    2、逆向生成

    1. <table schema="" tableName="t_hibernate_book" domainObjectName="Hbook"
    2. enableCountByExample="false" enableDeleteByExample="false"
    3. enableSelectByExample="false" enableUpdateByExample="false">
    4. table>
    5. <table schema="" tableName="t_hibernate_category" domainObjectName="Category"
    6. enableCountByExample="false" enableDeleteByExample="false"
    7. enableSelectByExample="false" enableUpdateByExample="false">
    8. table>
    9. <table schema="" tableName="t_hibernate_book_category" domainObjectName="HbookCategory"
    10. enableCountByExample="false" enableDeleteByExample="false"
    11. enableSelectByExample="false" enableUpdateByExample="false">
    12. table>

    步骤一样我们直接上不一样的地方

    编写XMl配置文件,这个文件我们直接下载中间的标的配置文件中

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

  • 相关阅读:
    面对“双十一”这样的大促,品牌方还能多做些什么?
    Zabbix监控
    Zabbix 5.0:服务端进程总结
    Head First设计模式(阅读笔记)-02.观察者模式
    Nginx:反向代理(示意图+配置)
    第四章redis配置文件的介绍
    unity 使用RenderTexture映射到UIRawImage上,拖拽Image旋转模型
    Himall商城- web私有方法
    用户自定义消息及层次划分
    Netty源码学习8——从ThreadLocal到FastThreadLocal(如何让FastThreadLocal内存泄漏doge)
  • 原文地址:https://blog.csdn.net/weixin_66110079/article/details/126364081