• 关联关系映射


    目录

    本次目标:

    一、一对多关联关系

    二、多对多关联关系


    本次目标:

    1. 一对多关联关系
    2. 多对多关联关系

    一、一对多关联关系

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

     t_hibernate_order:

    t_hibernate_order_item :

    知道表之后我们直接生成相对应的对象:

    先把这几个地方改一下:(如果不懂的如何生成通用的增删改查可以看看这里,里面有些哦)

     还有下面的那个表名也要改一下:

     generatorConfig.xml:

    1. generatorConfiguration PUBLIC "-//mybatis.org//DTD MyBatis Generator Configuration 1.0//EN"
    2. "http://mybatis.org/dtd/mybatis-generator-config_1_0.dtd" >
    3. <generatorConfiguration>
    4. <properties resource="jdbc.properties"/>
    5. <classPathEntry location="D:\\maven\\mvn_repository\\mysql\\mysql-connector-java\\5.1.44\\mysql-connector-java-5.1.44.jar"/>
    6. <context id="infoGuardian">
    7. <commentGenerator>
    8. <property name="suppressAllComments" value="true"/>
    9. <property name="suppressDate" value="true"/>
    10. commentGenerator>
    11. <jdbcConnection driverClass="${jdbc.driver}"
    12. connectionURL="${jdbc.url}" userId="${jdbc.username}" password="${jdbc.password}"/>
    13. <javaTypeResolver>
    14. <property name="forceBigDecimals" value="false"/>
    15. javaTypeResolver>
    16. <javaModelGenerator targetPackage="com.ps.ssm.model"
    17. targetProject="src/main/java">
    18. <property name="enableSubPackages" value="false"/>
    19. <property name="constructorBased" value="true"/>
    20. <property name="trimStrings" value="false"/>
    21. <property name="immutable" value="false"/>
    22. javaModelGenerator>
    23. <sqlMapGenerator targetPackage="com.ps.ssm.mapper"
    24. targetProject="src/main/java">
    25. <property name="enableSubPackages" value="false"/>
    26. sqlMapGenerator>
    27. <javaClientGenerator targetPackage="com.ps.ssm.mapper"
    28. targetProject="src/main/java" type="XMLMAPPER">
    29. <property name="enableSubPackages" value="false"/>
    30. javaClientGenerator>
    31. <table schema="" tableName="t_hibernate_order" domainObjectName="Order"
    32. enableCountByExample="false" enableDeleteByExample="false"
    33. enableSelectByExample="false" enableUpdateByExample="false">
    34. table>
    35. <table schema="" tableName="t_hibernate_order_item " domainObjectName="Item"
    36. enableCountByExample="false" enableDeleteByExample="false"
    37. enableSelectByExample="false" enableUpdateByExample="false">
    38. table>
    39. context>
    40. generatorConfiguration>

    生成后:

    OrderBiz:

    1. package com.ps.ssm.biz;
    2. import com.ps.ssm.model.Book;
    3. import com.ps.ssm.model.BookVo;
    4. import com.ps.ssm.model.Order;
    5. import com.ps.ssm.model.vo.OrderVo;
    6. import com.ps.ssm.util.PageBean;
    7. import org.apache.ibatis.annotations.Param;
    8. import java.util.List;
    9. import java.util.Map;
    10. public interface OrderBiz {
    11. int deleteByPrimaryKey(Integer orderId);
    12. int insert(Order record);
    13. int insertSelective(Order record);
    14. Order selectByPrimaryKey(Integer orderId);
    15. OrderVo queryOrderVoByOrderId(Integer orderId);
    16. int updateByPrimaryKeySelective(Order record);
    17. int updateByPrimaryKey(Order record);
    18. }

    ItemBiz

    1. package com.ps.ssm.biz;
    2. import com.ps.ssm.model.Item;
    3. import com.ps.ssm.model.vo.ItemVo;
    4. import org.apache.ibatis.annotations.Param;
    5. public interface ItemBiz {
    6. int deleteByPrimaryKey(Integer ItemId);
    7. int insert(Item record);
    8. int insertSelective(Item record);
    9. Item selectByPrimaryKey(Integer ItemId);
    10. ItemVo queryItemVoByItemId(Integer ItemId);
    11. int updateByPrimaryKeySelective(Item record);
    12. int updateByPrimaryKey(Item record);
    13. }

    OrderBizImpl

    1. package com.ps.ssm.biz.impl;
    2. import com.ps.ssm.biz.OrderBiz;
    3. import com.ps.ssm.mapper.OrderMapper;
    4. import com.ps.ssm.model.Order;
    5. import com.ps.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 deleteByPrimaryKey(Integer orderId) {
    14. return 0;
    15. }
    16. @Override
    17. public int insert(Order record) {
    18. return 0;
    19. }
    20. @Override
    21. public int insertSelective(Order record) {
    22. return 0;
    23. }
    24. @Override
    25. public Order selectByPrimaryKey(Integer orderId) {
    26. return null;
    27. }
    28. @Override
    29. public OrderVo queryOrderVoByOrderId(Integer orderId) {
    30. return orderMapper.queryOrderVoByOrderId(orderId);
    31. }
    32. @Override
    33. public int updateByPrimaryKeySelective(Order record) {
    34. return 0;
    35. }
    36. @Override
    37. public int updateByPrimaryKey(Order record) {
    38. return 0;
    39. }
    40. }

    ItemBizImpl:

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

    OrderVo : 

    1. package com.ps.vo;
    2. import com.ps.model.Order;
    3. import com.ps.model.OrderItem;
    4. import java.util.ArrayList;
    5. import java.util.List;
    6. public class OrderVo extends Order {
    7. private List orderItems = new ArrayList<>();
    8. public List getOrderItems() {
    9. return orderItems;
    10. }
    11. public void setOrderItems(List orderItems) {
    12. this.orderItems = orderItems;
    13. }
    14. @Override
    15. public String toString() {
    16. return "OrderVo{" +
    17. "orderItems=" + orderItems +
    18. '}';
    19. }
    20. }

    ItemVo :

    1. package com.ps.vo;
    2. import com.ps.model.Order;
    3. import com.ps.model.OrderItem;
    4. public class ItemVo extends OrderItem {
    5. private Order order;
    6. public Order getOrder() {
    7. return order;
    8. }
    9. public void setOrder(Order order) {
    10. this.order = order;
    11. }
    12. @Override
    13. public String toString() {
    14. return "OrderItemVo{" +
    15. "order=" + order +
    16. '}';
    17. }
    18. }

    两个表之间的关系:

                 1、一个订单有多个订单详情表

                 2、一个订单详情只有一个订单

    二、多对多关联关系

    比如一本书籍有多个类别,多个类别对多本书 

    多对多相当于两个一对多

    1. <resultMap id="HbookVoMap" type="com.ps.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.ps.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.ps.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.ps.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.ps.biz.impl;
    2. import com.ps.biz.HbookCategoryBiz;
    3. import com.ps.mapper.HbookCategoryMapper;
    4. import com.ps.model.HbookCategory;
    5. import com.ps.model.vo.CategoryVo;
    6. import com.ps.model.vo.HbookVo;
    7. import org.springframework.beans.factory.annotation.Autowired;
    8. import org.springframework.stereotype.Service;
    9. /**
    10. * @author 彭于晏
    11. * @create 2022-08-15 23: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.ps.biz.impl;
    2. import com.ps.biz.HbookCategoryBiz;
    3. import com.ps.model.vo.CategoryVo;
    4. import com.ps.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 彭于晏
    12. * @create 2022-08-15 0: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. }

    queryByBookId结果:

    queryByCid效果: 

     

    好啦!今天的分享就到这里,我们下次再见!

     

  • 相关阅读:
    eNSP-OSPF协议其他区域不与骨干区域相连解决方法1
    电脑扫描不到端口了怎么回事啊?
    贪心算法之哈夫曼编码
    Outlook导入导出功能灰色,怎么解决
    山东大学项目实训(二十七)—— 微信小程序开发总结,一年时间真的可以改变一个人很多
    Linux手记
    代码随想录(单调栈3)| 84.柱状图中最大的矩形
    汽车以太网线束测试及如何破局
    微信小程序毕业设计论文_SSM项目会议预约管理+后台管理系统_项目源代码
    Office 2019 激活-探索(仅供参考)
  • 原文地址:https://blog.csdn.net/weixin_63531940/article/details/126354295