当前位置: 首页 > news >正文

MyBatis 的关联关系配置 一对多,一对一,多对多 关系的映射处理

目录

一.关联关系配置的好处

 二. 导入数据库表:

 三.    一对多关系:--    一个订单对应多个订单项       

四.一对一关系:---一个订单项对应一个订单

五.多对多关系(两个一对多)


一.关联关系配置的好处

         MyBatis是一个Java持久化框架,可以通过XML或注解的方式将对象与数据库的关系进行映射。在MyBatis中,可以使用不同的方式配置关联关系,包括一对多、一对一和多对多关系。接上篇的MyBatis的教学

  1. 数据库表之间的关联关系:在关系型数据库中,不同表之间存在一对多、一对一、多对多等关联关系。通过在MyBatis中配置关联关系,可以方便地处理这些表之间的连接和查询操作,使数据的读取和写入更加简单和高效。

  2. 避免手动编写复杂SQL:使用MyBatis的关联关系配置,可以避免手动编写复杂的SQL语句来处理多个表之间的关联。通过简单的配置,MyBatis可以自动处理表之间的连接查询,简化了开发者的工作量。

  3. 对象关系映射:MyBatis是一个对象关系映射(ORM)框架,它可以将数据库中的表与Java对象之间进行映射。配置关联关系可以帮助开发者实现对象之间的关联,提供了更加面向对象的编程方式。

  4. 冗余数据减少:通过合理的关联关系配置,可以避免数据的冗余存储,减少数据库的存储空间占用。同时,在查询数据时,也可以通过关联关系一次性获取到所有相关的数据,提高查询效率。

总的来说,MyBatis的关联关系配置可以帮助开发者处理多表之间的关系,提供了更方便、高效和可维护的数据操作方式,减少了手动编写复杂SQL语句的工作量,同时也符合对象关系映射的思想。

 二. 导入数据库表:

                在generatorConfig.xml配置文件中,配入多张表        

 

 


 三.    一对多关系:--    一个订单对应多个订单项        

          使用嵌套查询(Nested Queries):在主对象的映射配置中使用<collection>标签来配置关联的多个子对象。可以通过select语句查询子对象,并通过resultMap将结果映射到主对象中。

        我们先在orderMapper.xml中写一个根据ID查询订单的方法

          创建一个orderVo

package com.zking.vo;import com.zking.model.Order;
import com.zking.model.OrderItem;import java.util.ArrayList;
import java.util.List;/*** @author yinzi* @create 2023-08-26 14:14*/
public class OrderVo extends Order {private List<OrderItem> orderItems=new ArrayList<>();public List<OrderItem> getOrderItems() {return orderItems;}public void setOrderItems(List<OrderItem> orderItems) {this.orderItems = orderItems;}
}

      建一个resultMap的映射

         接着,写biz层

package com.zking.biz;import com.zking.mapper.OrderMapper;
import com.zking.vo.OrderVo;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;/*** @author yinzi* @create 2023-08-26 14:31*/
@Service //交给spring管理
public class OrderBizImpl implements OrderBiz {@Autowiredprivate OrderMapper om;@Overridepublic OrderVo selectbyOid(Integer oid) {return om.selectbyOid(oid);}
}

        最后测试结果

 


四.一对一关系:---一个订单项对应一个订单

        使用嵌套查询(Nested Queries):在主对象的映射配置中使用<association>标签来配置关联的子对象。可以通过select语句查询子对象,并通过resultMap将结果映射到主对象中。

        一样,我先来配置一个查询的方法

         然后写biz层

package com.zking.biz;import com.zking.mapper.OrderItemMapper;
import com.zking.model.OrderItem;
import com.zking.vo.OrderItemVo;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;/*** @author yinzi* @create 2023-08-26 15:23*/
@Service
public class OrderItemBizImpl implements OrderItemBiz {@Autowiredprivate OrderItemMapper oim;@Overridepublic OrderItemVo selectByOrderItemId(Integer oiid) {return oim.selectByOrderItemId(oiid);}
}

        最后测试:

 

五.多对多关系(两个一对多)

        使用嵌套查询(Nested Queries):在中间表的映射配置中使用<collection>标签来配置关联的多个子对象。可以通过select语句查询子对象,并通过resultMap将结果映射到中间表对象中。

        老套路,先配置一个查询的方法

         然后接着写biz层

package com.zking.biz;import com.zking.mapper.HBookMapper;
import com.zking.vo.HBookVo;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;/*** @author yinzi* @create 2023-08-26 16:08*/
@Service
public class HBookBizImpl implements HBookBiz {@Autowiredprivate HBookMapper hm;@Overridepublic HBookVo selectByBookId(Integer bid) {return hm.selectByBookId(bid);}
}

最后测试结果:

 今天的分享就到这啦!!

 

http://www.lryc.cn/news/140801.html

相关文章:

  • Diffusion Models for Image Restoration and Enhancement – A Comprehensive Survey
  • Springboot开发所遇问题(持续更新)
  • 智能电视与win10电脑后续无法实现DLNA屏幕共享
  • 如何可以管理监督员工工作微信?
  • 【Django】如何转化已有的数据表到Django模型--20230823
  • 【C语言】喝汽水问题
  • 项目进度管理(4-2)关键链法和关键路径法的区别和联系
  • 基于Java+SpringBoot+Vue前后端分离医院后台管理系统设计和实现
  • 二维数组传参
  • AI 绘画Stable Diffusion 研究(十四)SD 图生图+剪映制作人物说话视频
  • ProPlot 基本语法及特点
  • element-template-admin get请求正常 post请求超市问题
  • Promise.all和promise.race的应用场景举例
  • go学习-指针 标识符
  • LeetCode--HOT100题(42)
  • leetcode-49.字母异位词分组-day20
  • YOLOv8教程系列:三、K折交叉验证——让你的每一份标注数据都物尽其用(yolov8目标检测+k折交叉验证法)
  • leetcode算法题--表示数值的字符串
  • Docker安装及Docker构建简易版Hadoop生态
  • 使用Burp Suite进行Web应用渗透测试
  • Github的使用指南
  • mongodb 添加加点 stateStr 停在 STARTUP
  • c语言中编译过程与预处理
  • TP-LINK 路由器设置内网穿透
  • A 题国际旅游网络的大数据分析-详细解析与代码答案(2023 年全国高校数据统计与调查分析挑战赛
  • 《深入理解Java虚拟机》读书笔记: 类加载器
  • 宝塔计划任务读取文件失败
  • Python操作sql,备份数据库
  • Linux线程 --- 生产者消费者模型(C语言)
  • Vue2向Vue3过度核心技术computed计算属性