• 关联关系映射


    目录

    一、一对多

    二、多对多


    一、一对多


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

    generatorConfig.xml 

    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>

     vo类

    view object:视图对象

    OrderVo.java

    1. package com.maomao.ssm.model.vo;
    2. import com.maomao.ssm.model.Order;
    3. import com.maomao.ssm.model.OrderItem;
    4. import java.util.List;
    5. /**
    6. * vo类不仅仅包含当前表的信息,还能够包含相关联表的信息
    7. *
    8. * 当前订单会有一个或者多个订单项,多个订单项必须用集合进行接收
    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. }

    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.maomao.ssm.mapper.OrderMapper" >
    4. <resultMap id="BaseResultMap" type="com.maomao.ssm.model.Order" >
    5. <constructor >
    6. <idArg column="order_id" jdbcType="INTEGER" javaType="java.lang.Integer" />
    7. <arg column="order_no" jdbcType="VARCHAR" javaType="java.lang.String" />
    8. constructor>
    9. resultMap>
    10. <sql id="Base_Column_List" >
    11. order_id, order_no
    12. sql>
    13. <resultMap id="OrderVoMap" type="com.maomao.ssm.model.vo.OrderVo" >
    14. <result column="order_id" property="orderId">result>
    15. <result column="order_no" property="orderNo">result>
    16. <collection property="orderItems" ofType="com.maomao.ssm.model.vo.OrderItemVo">
    17. <result column="order_item_id" property="orderItemId">result>
    18. <result column="product_id" property="productId">result>
    19. <result column="quantity" property="quantity">result>
    20. <result column="oid" property="oid">result>
    21. collection>
    22. resultMap>
    23. <select id="quryOrderVoByOrderId" resultMap="OrderVoMap" parameterType="java.lang.Integer" >
    24. select * from t_hibernate_order o,t_hibernate_order_item oi
    25. where o.order_id=oi.oid and o.order_id=#{orderId}
    26. select>
    27. <select id="selectByPrimaryKey" resultMap="BaseResultMap" parameterType="java.lang.Integer" >
    28. select
    29. <include refid="Base_Column_List" />
    30. from t_hibernate_order
    31. where order_id = #{orderId,jdbcType=INTEGER}
    32. select>
    33. <delete id="deleteByPrimaryKey" parameterType="java.lang.Integer" >
    34. delete from t_hibernate_order
    35. where order_id = #{orderId,jdbcType=INTEGER}
    36. delete>
    37. <insert id="insert" parameterType="com.maomao.ssm.model.Order" >
    38. insert into t_hibernate_order (order_id, order_no)
    39. values (#{orderId,jdbcType=INTEGER}, #{orderNo,jdbcType=VARCHAR})
    40. insert>
    41. <insert id="insertSelective" parameterType="com.maomao.ssm.model.Order" >
    42. insert into t_hibernate_order
    43. <trim prefix="(" suffix=")" suffixOverrides="," >
    44. <if test="orderId != null" >
    45. order_id,
    46. if>
    47. <if test="orderNo != null" >
    48. order_no,
    49. if>
    50. trim>
    51. <trim prefix="values (" suffix=")" suffixOverrides="," >
    52. <if test="orderId != null" >
    53. #{orderId,jdbcType=INTEGER},
    54. if>
    55. <if test="orderNo != null" >
    56. #{orderNo,jdbcType=VARCHAR},
    57. if>
    58. trim>
    59. insert>
    60. <update id="updateByPrimaryKeySelective" parameterType="com.maomao.ssm.model.Order" >
    61. update t_hibernate_order
    62. <set >
    63. <if test="orderNo != null" >
    64. order_no = #{orderNo,jdbcType=VARCHAR},
    65. if>
    66. set>
    67. where order_id = #{orderId,jdbcType=INTEGER}
    68. update>
    69. <update id="updateByPrimaryKey" parameterType="com.maomao.ssm.model.Order" >
    70. update t_hibernate_order
    71. set order_no = #{orderNo,jdbcType=VARCHAR}
    72. where order_id = #{orderId,jdbcType=INTEGER}
    73. update>
    74. mapper>

    OrderBiz.java 

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

    OrderBizImpl.java 

    1. package com.maomao.ssm.biz;
    2. import com.maomao.ssm.mapper.OrderMapper;
    3. import com.maomao.ssm.model.Order;
    4. import com.maomao.ssm.model.vo.OrderVo;
    5. import org.springframework.beans.factory.annotation.Autowired;
    6. import org.springframework.stereotype.Service;
    7. @Service
    8. public class OrderBizImpl implements OrderBiz {
    9. @Autowired
    10. private OrderMapper orderMapper;
    11. @Override
    12. public int deleteByPrimaryKey(Integer orderId) {
    13. return 0;
    14. }
    15. @Override
    16. public int insert(Order record) {
    17. return 0;
    18. }
    19. @Override
    20. public int insertSelective(Order record) {
    21. return 0;
    22. }
    23. @Override
    24. public Order selectByPrimaryKey(Integer orderId) {
    25. return null;
    26. }
    27. @Override
    28. public OrderVo quryOrderVoByOrderId(Integer orderId) {
    29. return orderMapper.quryOrderVoByOrderId(orderId);
    30. }
    31. @Override
    32. public int updateByPrimaryKeySelective(Order record) {
    33. return 0;
    34. }
    35. @Override
    36. public int updateByPrimaryKey(Order record) {
    37. return 0;
    38. }
    39. }

    OrderBizImpl.java 

    1. package com.maomao.ssm.biz.impl;
    2. import com.maomao.ssm.biz.OrderBiz;
    3. import com.maomao.ssm.model.Order;
    4. import com.maomao.ssm.model.vo.OrderVo;
    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. import static org.junit.Assert.*;
    11. @RunWith(SpringJUnit4ClassRunner.class)
    12. @ContextConfiguration(locations={"classpath:applicationContext-mybatis.xml"})
    13. public class OrderBizImplTest {
    14. @Autowired
    15. private OrderBiz orderBiz;
    16. @Test
    17. public void quryOrderVoByOrderId() {
    18. OrderVo order = orderBiz.quryOrderVoByOrderId(9);
    19. System.out.println(order);
    20. order.getOrderItems().forEach(System.out::println);
    21. }
    22. }

     OrderItemVo.java

    1. package com.maomao.ssm.model.vo;
    2. import com.maomao.ssm.model.Order;
    3. import com.maomao.ssm.model.OrderItem;
    4. /**
    5. * 某一个订单项一定属于某个订单的
    6. */
    7. public class OrderItemVo extends OrderItem {
    8. private Order order;
    9. public Order getOrder() {
    10. return order;
    11. }
    12. public void setOrder(Order order) {
    13. this.order = order;
    14. }
    15. }

     OrderitemMapper.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.maomao.ssm.mapper.OrderItemMapper" >
    4. <resultMap id="BaseResultMap" type="com.maomao.ssm.model.OrderItem" >
    5. <constructor >
    6. <idArg column="order_item_id" jdbcType="INTEGER" javaType="java.lang.Integer" />
    7. <arg column="product_id" jdbcType="INTEGER" javaType="java.lang.Integer" />
    8. <arg column="quantity" jdbcType="INTEGER" javaType="java.lang.Integer" />
    9. <arg column="oid" jdbcType="INTEGER" javaType="java.lang.Integer" />
    10. constructor>
    11. resultMap>
    12. <sql id="Base_Column_List" >
    13. order_item_id, product_id, quantity, oid
    14. sql>
    15. <resultMap id="OrderItemVoMap" type="com.maomao.ssm.model.vo.OrderItemVo" >
    16. <result column="order_item_id" property="orderItemId">result>
    17. <result column="product_id" property="productId">result>
    18. <result column="quantity" property="quantity">result>
    19. <result column="oid" property="oid">result>
    20. <collection property="order" javaType="com.maomao.ssm.model.Order">
    21. <result column="order_id" property="orderId">result>
    22. <result column="order_no" property="orderNo">result>
    23. collection>
    24. resultMap>
    25. <select id="queryOrderItemVoByOrderItemId" resultMap="OrderItemVoMap" parameterType="java.lang.Integer" >
    26. select * from t_hibernate_order o,t_hibernate_order_item oi
    27. where o.order_id=oi.oid and oi.order_item_id=#{orderItemId}
    28. select>
    29. <select id="selectByPrimaryKey" resultMap="BaseResultMap" parameterType="java.lang.Integer" >
    30. select
    31. <include refid="Base_Column_List" />
    32. from t_hibernate_order_item
    33. where order_item_id = #{orderItemId,jdbcType=INTEGER}
    34. select>
    35. <delete id="deleteByPrimaryKey" parameterType="java.lang.Integer" >
    36. delete from t_hibernate_order_item
    37. where order_item_id = #{orderItemId,jdbcType=INTEGER}
    38. delete>
    39. <insert id="insert" parameterType="com.maomao.ssm.model.OrderItem" >
    40. insert into t_hibernate_order_item (order_item_id, product_id, quantity,
    41. oid)
    42. values (#{orderItemId,jdbcType=INTEGER}, #{productId,jdbcType=INTEGER}, #{quantity,jdbcType=INTEGER},
    43. #{oid,jdbcType=INTEGER})
    44. insert>
    45. <insert id="insertSelective" parameterType="com.maomao.ssm.model.OrderItem" >
    46. insert into t_hibernate_order_item
    47. <trim prefix="(" suffix=")" suffixOverrides="," >
    48. <if test="orderItemId != null" >
    49. order_item_id,
    50. if>
    51. <if test="productId != null" >
    52. product_id,
    53. if>
    54. <if test="quantity != null" >
    55. quantity,
    56. if>
    57. <if test="oid != null" >
    58. oid,
    59. if>
    60. trim>
    61. <trim prefix="values (" suffix=")" suffixOverrides="," >
    62. <if test="orderItemId != null" >
    63. #{orderItemId,jdbcType=INTEGER},
    64. if>
    65. <if test="productId != null" >
    66. #{productId,jdbcType=INTEGER},
    67. if>
    68. <if test="quantity != null" >
    69. #{quantity,jdbcType=INTEGER},
    70. if>
    71. <if test="oid != null" >
    72. #{oid,jdbcType=INTEGER},
    73. if>
    74. trim>
    75. insert>
    76. <update id="updateByPrimaryKeySelective" parameterType="com.maomao.ssm.model.OrderItem" >
    77. update t_hibernate_order_item
    78. <set >
    79. <if test="productId != null" >
    80. product_id = #{productId,jdbcType=INTEGER},
    81. if>
    82. <if test="quantity != null" >
    83. quantity = #{quantity,jdbcType=INTEGER},
    84. if>
    85. <if test="oid != null" >
    86. oid = #{oid,jdbcType=INTEGER},
    87. if>
    88. set>
    89. where order_item_id = #{orderItemId,jdbcType=INTEGER}
    90. update>
    91. <update id="updateByPrimaryKey" parameterType="com.maomao.ssm.model.OrderItem" >
    92. update t_hibernate_order_item
    93. set product_id = #{productId,jdbcType=INTEGER},
    94. quantity = #{quantity,jdbcType=INTEGER},
    95. oid = #{oid,jdbcType=INTEGER}
    96. where order_item_id = #{orderItemId,jdbcType=INTEGER}
    97. update>
    98. mapper>

    OrderitemBiz.java 

    1. package com.maomao.ssm.biz;
    2. import com.maomao.ssm.mapper.OrderMapper;
    3. import com.maomao.ssm.model.Order;
    4. import com.maomao.ssm.model.vo.OrderVo;
    5. import org.springframework.beans.factory.annotation.Autowired;
    6. import org.springframework.stereotype.Service;
    7. @Service
    8. public class OrderBizImpl implements OrderBiz {
    9. @Autowired
    10. private OrderMapper orderMapper;
    11. @Override
    12. public int deleteByPrimaryKey(Integer orderId) {
    13. return 0;
    14. }
    15. @Override
    16. public int insert(Order record) {
    17. return 0;
    18. }
    19. @Override
    20. public int insertSelective(Order record) {
    21. return 0;
    22. }
    23. @Override
    24. public Order selectByPrimaryKey(Integer orderId) {
    25. return null;
    26. }
    27. @Override
    28. public OrderVo quryOrderVoByOrderId(Integer orderId) {
    29. return orderMapper.quryOrderVoByOrderId(orderId);
    30. }
    31. @Override
    32. public int updateByPrimaryKeySelective(Order record) {
    33. return 0;
    34. }
    35. @Override
    36. public int updateByPrimaryKey(Order record) {
    37. return 0;
    38. }
    39. }

    OrderitemBizImpl.java 

    1. package com.maomao.ssm.biz.impl;
    2. import com.maomao.ssm.biz.OrderItemBiz;
    3. import com.maomao.ssm.mapper.OrderItemMapper;
    4. import com.maomao.ssm.model.OrderItem;
    5. import com.maomao.ssm.model.vo.OrderItemVo;
    6. import org.springframework.beans.factory.annotation.Autowired;
    7. import org.springframework.stereotype.Service;
    8. @Service
    9. public class OrderItemBizImpl implements OrderItemBiz {
    10. @Autowired
    11. private OrderItemMapper orderItemMapper;
    12. @Override
    13. public int deleteByPrimaryKey(Integer orderItemId) {
    14. return 0;
    15. }
    16. @Override
    17. public int insert(OrderItem record) {
    18. return 0;
    19. }
    20. @Override
    21. public int insertSelective(OrderItem record) {
    22. return 0;
    23. }
    24. @Override
    25. public OrderItem selectByPrimaryKey(Integer orderItemId) {
    26. return null;
    27. }
    28. @Override
    29. public OrderItemVo queryOrderItemVoByOrderItemId(Integer orderItemId) {
    30. return orderItemMapper.queryOrderItemVoByOrderItemId(orderItemId);
    31. }
    32. @Override
    33. public int updateByPrimaryKeySelective(OrderItem record) {
    34. return 0;
    35. }
    36. @Override
    37. public int updateByPrimaryKey(OrderItem record) {
    38. return 0;
    39. }
    40. }

     OrderitemBizImplTest.java 

    1. package com.maomao.ssm.biz.impl;
    2. import com.maomao.ssm.biz.OrderItemBiz;
    3. import com.maomao.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. import static org.junit.Assert.*;
    10. @RunWith(SpringJUnit4ClassRunner.class)
    11. @ContextConfiguration(locations={"classpath:applicationContext-mybatis.xml"})
    12. public class OrderItemBizImplTest {
    13. @Autowired
    14. private OrderItemBiz orderItemBiz;
    15. @Test
    16. public void queryOrderItemVoByOrderItemId() {
    17. OrderItemVo orderItemVo = orderItemBiz.queryOrderItemVoByOrderItemId(43);
    18. System.out.println(orderItemVo);
    19. }
    20. }

    collection:一对多的一方,对应关联属性ofType
    Association:一对多的多方,对应关联属性javaType  

    二、多对多

    首先先用逆向生成工具生成t_hibernate_bookt_hibernate_book_categoryt_hibernate_category,这两张表对应的model与mapper

    HbookMapper.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.maomao.mapper.HbookMapper" >
    4. <resultMap id="BaseResultMap" type="com.maomao.model.Hbook" >
    5. <constructor >
    6. <idArg column="book_id" jdbcType="INTEGER" javaType="java.lang.Integer" />
    7. <arg column="book_name" jdbcType="VARCHAR" javaType="java.lang.String" />
    8. <arg column="price" jdbcType="REAL" javaType="java.lang.Float" />
    9. constructor>
    10. resultMap>
    11. <sql id="Base_Column_List" >
    12. book_id, book_name, price
    13. sql>
    14. <select id="selectByPrimaryKey" resultMap="BaseResultMap" parameterType="java.lang.Integer" >
    15. select
    16. <include refid="Base_Column_List" />
    17. from t_hibernate_book
    18. where book_id = #{bookId,jdbcType=INTEGER}
    19. select>
    20. <delete id="deleteByPrimaryKey" parameterType="java.lang.Integer" >
    21. delete from t_hibernate_book
    22. where book_id = #{bookId,jdbcType=INTEGER}
    23. delete>
    24. <insert id="insert" parameterType="com.maomao.model.Hbook" >
    25. insert into t_hibernate_book (book_id, book_name, price
    26. )
    27. values (#{bookId,jdbcType=INTEGER}, #{bookName,jdbcType=VARCHAR}, #{price,jdbcType=REAL}
    28. )
    29. insert>
    30. <insert id="insertSelective" parameterType="com.maomao.model.Hbook" >
    31. insert into t_hibernate_book
    32. <trim prefix="(" suffix=")" suffixOverrides="," >
    33. <if test="bookId != null" >
    34. book_id,
    35. if>
    36. <if test="bookName != null" >
    37. book_name,
    38. if>
    39. <if test="price != null" >
    40. price,
    41. if>
    42. trim>
    43. <trim prefix="values (" suffix=")" suffixOverrides="," >
    44. <if test="bookId != null" >
    45. #{bookId,jdbcType=INTEGER},
    46. if>
    47. <if test="bookName != null" >
    48. #{bookName,jdbcType=VARCHAR},
    49. if>
    50. <if test="price != null" >
    51. #{price,jdbcType=REAL},
    52. if>
    53. trim>
    54. insert>
    55. <update id="updateByPrimaryKeySelective" parameterType="com.maomao.model.Hbook" >
    56. update t_hibernate_book
    57. <set >
    58. <if test="bookName != null" >
    59. book_name = #{bookName,jdbcType=VARCHAR},
    60. if>
    61. <if test="price != null" >
    62. price = #{price,jdbcType=REAL},
    63. if>
    64. set>
    65. where book_id = #{bookId,jdbcType=INTEGER}
    66. update>
    67. <update id="updateByPrimaryKey" parameterType="com.maomao.model.Hbook" >
    68. update t_hibernate_book
    69. set book_name = #{bookName,jdbcType=VARCHAR},
    70. price = #{price,jdbcType=REAL}
    71. where book_id = #{bookId,jdbcType=INTEGER}
    72. update>
    73. mapper>

    HbookCategoryBiz.java 

    1. package com.maomao.biz;
    2. import com.maomao.model.HbookCategory;
    3. import com.maomao.model.vo.CategoryVo;
    4. import com.maomao.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 .java 

    1. package com.maomao.biz.impl;
    2. import com.maomao.biz.HbookCategoryBiz;
    3. import com.maomao.mapper.HbookCategoryMapper;
    4. import com.maomao.model.HbookCategory;
    5. import com.maomao.model.vo.CategoryVo;
    6. import com.maomao.model.vo.HbookVo;
    7. import org.springframework.beans.factory.annotation.Autowired;
    8. import org.springframework.stereotype.Service;
    9. @Service
    10. public class HbookCategoryBizImpl implements HbookCategoryBiz {
    11. @Autowired
    12. private HbookCategoryMapper hbookCategoryMapper;
    13. @Override
    14. public HbookVo queryByBookId(Integer bookId) {
    15. return hbookCategoryMapper.queryByBookId(bookId);
    16. }
    17. @Override
    18. public CategoryVo queryByCid(Integer cid) {
    19. return hbookCategoryMapper.queryByCid(cid);
    20. }
    21. }

    HbookCategoryBizImplTest.java  

    1. package com.maomao.biz.impl;
    2. import com.maomao.biz.HbookCategoryBiz;
    3. import com.maomao.model.vo.CategoryVo;
    4. import com.maomao.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. import static org.junit.Assert.*;
    11. @RunWith(SpringJUnit4ClassRunner.class)
    12. @ContextConfiguration(locations={"classpath:applicationContext-mybatis.xml"})
    13. public class HbookCategoryBizImplTest {
    14. @Autowired
    15. private HbookCategoryBiz hbookCategoryBiz;
    16. @Test
    17. public void queryByBookId() {
    18. HbookVo hbookVo = hbookCategoryBiz.queryByBookId(8);
    19. System.out.println(hbookVo);
    20. hbookVo.getCategories().forEach(System.out::println);
    21. }
    22. @Test
    23. public void queryByCid() {
    24. CategoryVo categoryVo = hbookCategoryBiz.queryByCid(8);
    25. System.out.println(categoryVo);
    26. categoryVo.getHbooks().forEach(System.out::println);
    27. }
    28. }

  • 相关阅读:
    IntelliJ IDEA 常用的插件
    Jupyter Notebook:使用Jupyter NoteBook的时候遇到的一些坑。
    Pycharm2024版,更换安装源
    2024年抖店的市场已经饱和,小白不适合入局了?真实现状如下
    计算机毕业设计ssm点餐系统平台l4fk2系统+程序+源码+lw+远程部署
    【4】c++11新特性(稳定性和兼容性)—>final关键字
    驱动LSM6DS3TR-C实现高效运动检测与数据采集(4)----上报匿名上位机实现可视化
    基于增强蛇优化算法求解单目标优化问题附matlab代码
    pwncollege.ReverseEngineering
    【论文整理1】On the Continuity of Rotation Representations in Neural Networks
  • 原文地址:https://blog.csdn.net/m12120426/article/details/126354231