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

Mybatis中的关系映射

1.一对一的映射关系

一对一关系(One-to-One)表示两个实体对象之间存在唯一的关联关系。例如,一个学生只能拥有一个身份证。在 MyBatis 中,我们可以使用结果嵌套或一对一映射来处理一对一关系。

1.1 创建模型类和Vo类

package com.YU.model;public class OrderItem {private Integer orderItemId;private Integer productId;private Integer quantity;private Integer oid;public OrderItem(Integer orderItemId, Integer productId, Integer quantity, Integer oid) {this.orderItemId = orderItemId;this.productId = productId;this.quantity = quantity;this.oid = oid;}public OrderItem() {super();}public Integer getOrderItemId() {return orderItemId;}public void setOrderItemId(Integer orderItemId) {this.orderItemId = orderItemId;}public Integer getProductId() {return productId;}public void setProductId(Integer productId) {this.productId = productId;}public Integer getQuantity() {return quantity;}public void setQuantity(Integer quantity) {this.quantity = quantity;}public Integer getOid() {return oid;}public void setOid(Integer oid) {this.oid = oid;}
}
package com.YU.vo;import com.YU.model.Order;
import com.YU.model.OrderItem;/*** @author YU* @create 2023-09-04 9:31*/
public class OrderItemVo extends OrderItem {private Order order;public Order getOrder() {return order;}public void setOrder(Order order) {this.order = order;}
}

 

 1.2 配置当前模型类的mapper.xml

<resultMap id="OrderItemVoMap" type="com.YU.vo.OrderItemVo"><result column="order_item_id" property="orderItemId"></result><result column="product_id" property="productId"></result><result column="quantity" property="quantity"></result><result column="oid" property="oid"></result><association property="order" javaType="com.YU.model.Order"><result column="order_id" property="orderId"></result><result column="order_no" property="orderNo"></result></association></resultMap><select id="selectByOrderItemId" parameterType="OrderItemVoMap" parameterMap="java.lang.Integer">SELECT * FROM t_hibernate_order o,t_hibernate_order_item oiwhere o.order_id = oi.oid and oi.order_item_id = #{oiid}</select>

1.3 开始测试

省略了业务逻辑层的编写,这里使用junit直接进行测试

package com.YU.biz.Impl;import com.YU.biz.OrderItemBiz;
import com.YU.vo.OrderItemVo;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.test.context.ContextConfiguration;
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;/*** @author YU* @create 2023-09-04 9:49*/
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(locations={"classpath:spring-context.xml"}
)
public class OrderTest {@Autowiredprivate OrderItemBiz orderItemBiz;@Testpublic void selectOrderItemId(){OrderItemVo orderItemVo = orderItemBiz.selectByOrderItemId(27);System.out.println(orderItemVo);System.out.println(orderItemVo.getOrder());}
}

2.一对多的映射关系

一对多关系(One-to-Many)表示一个实体对象(一的一方)可以与多个相关实体对象(多的一方)建立关联。例如,一个部门可以有多个员工。在 MyBatis 中,我们可以使用嵌套查询或结果映射来处理一对多关系。

2.1 创建模型类和Vo类

package com.YU.model;import lombok.ToString;@ToString
public class Order {private Integer orderId;private String orderNo;public Order(Integer orderId, String orderNo) {this.orderId = orderId;this.orderNo = orderNo;}public Order() {super();}public Integer getOrderId() {return orderId;}public void setOrderId(Integer orderId) {this.orderId = orderId;}public String getOrderNo() {return orderNo;}public void setOrderNo(String orderNo) {this.orderNo = orderNo;}
}
package com.YU.vo;import com.YU.model.Order;
import com.YU.model.OrderItem;import java.util.ArrayList;
import java.util.List;/*** @author YU* @create 2023-09-04 9:31*/
public class OrderVo extends Order {private List<OrderItem> OrderItems = new ArrayList<>();public List<com.YU.model.OrderItem> getOrderItem() {return OrderItems;}public void setOrderItem(List<com.YU.model.OrderItem> OrderItems) {this.OrderItems = OrderItems;}
}

2.2 配置当前模型类的mapper.xml

<resultMap id="OrderVoMap" type="com.YU.vo.OrderVo"><result column="order_id" property="orderId"></result><result column="order_no" property="productId"></result><collection property="orderItems" ofType="com.YU.model.Order"><result column="order_item_id" property="orderItemId"></result><result column="product_id" property="productId"></result><result column="quantity" property="quantity"></result><result column="oid" property="oid"></result></collection></resultMap><select id="selectByOid" resultMap="OrderVoMap" parameterType="java.lang.Integer">SELECT * FROM t_hibernate_order o,t_hibernate_order_item oiwhere o.order_id = oi.oid and o.order_id = #{oid}</select>

2.3 开始测试

@Autowiredprivate OrderBiz orderBiz;@Testpublic void selectByOid(){OrderVo orderVo = orderBiz.selectByOid(7);System.out.println(orderVo);orderVo.getOrderItem().forEach(System.out::println);}

3.多对多的映射关系

多对多的映射关系是指两个实体之间存在多对多的关系,其中一个实体可以关联多个另一个实体,而另一个实体也可以关联多个第一个实体。

在关系型数据库中,多对多的关系需要通过中间表(也称为连接表)来实现。中间表包含两个外键关联到两个实体的主键,用于记录它们之间的关系。

总结

在 MyBatis 中,映射关系是指数据库表和 Java 对象之间的映射配置,用于将查询结果映射到 Java 对象或将 Java 对象的属性映射到数据库表的列

基于 XML 的映射方式:

  • 使用 <resultMap> 元素配置结果集的映射关系,指定数据库列和 Java 对象属性之间的映射。
  • 可以使用 <result> 元素将数据库列映射到 Java 对象的属性,并指定属性的类型、映射关系及相关配置。
  • 可以使用 <association> 元素配置关联对象的映射关系,用于映射复杂对象之间的关系。
  • 可以使用 <collection> 元素配置集合类型对象的映射关系,用于映射一对多或多对多的关系。
  • 使用 <sql> 元素定义可重用的 SQL 片段,提供了组织和共享 SQL 语句的能力。

 注意点: 

  • 确保数据库表和 Java 对象的属性名称、类型一致,以便正确地映射数据。
  • 配置正确的映射关系,确保查询结果能正确映射到 Java 对象,或对象的属性能正确映射到数据库表。
  • 对于复杂的关联关系,需要配置适当的映射关系,以便处理关联对象之间的关系。

正确配置映射关系可以提高数据的访问效率和开发效率,使数据库表和 Java 对象之间的转换更加方便和灵活。

相关文章:

Mybatis中的关系映射

1.一对一的映射关系 一对一关系&#xff08;One-to-One&#xff09;表示两个实体对象之间存在唯一的关联关系。例如&#xff0c;一个学生只能拥有一个身份证。在 MyBatis 中&#xff0c;我们可以使用结果嵌套或一对一映射来处理一对一关系。 1.1 创建模型类和Vo类 package com…...

领域建模之数据模型设计方法论

本文通过实际业务需求场景建模案例&#xff0c;为读者提供一种业务模型向数据模型设计的方法论&#xff0c;用于指导实际开发中如何进行业务模型向数据模型转化抽象&#xff0c;并对设计的数据模型可用性、扩展性提供了建议性思考。通过文章&#xff0c;读者可以收获到业务模型…...

springboot毕业生信息招聘平台设计与实现

摘 要 随着社会的发展&#xff0c;社会的各行各业都在利用信息化时代的优势。计算机的优势和普及使得各种信息系统的开发成为必需。 毕业生信息招聘平台&#xff0c;主要的模块包括查看管理员&#xff1b;首页、个人中心、企业管理、空中宣讲会管理、招聘岗位管理、毕业生管理…...

开发前期准备工作

开发前期准备工作 文章目录 开发前期准备工作0 代码规范0.1 强制0.2 推荐0.3 参考dao&#xff1a;跟数据库打交道service&#xff1a;业务层&#xff0c;人类思维解决controller&#xff1a;抽象化 0.4 注释规范0.5 日志规范0.6 专有名词0.7 控制层统一异常统一结构体控制层提示…...

k8s deployment服务回滚,设置节点为不可调度

服务回滚 通过滚动升级的策略可以平滑的升级Deployment&#xff0c;若升级出现问题&#xff0c;需要最快且最好的方式回退到上一次能够提供正常工作的版本。为此K8S提供了回滚机制。 revision&#xff1a;更新应用时&#xff0c;K8S都会记录当前的版本号&#xff0c;即为revi…...

信息系统安全运维和管理指南

声明 本文是学习 信息系统安全运维管理指南. 而整理的学习笔记,分享出来希望更多人受益,如果存在侵权请及时联系我们 安全运维支撑系统 信息系统安全服务台 目的 对信息系统安全事件进行统一监控与处理。 要求 建立一个集中的信息系统运行状态收集、处理、显示及报警的系…...

现货黄金代理好吗?

做黄金代理这个职业好吗&#xff1f;从目前的市场现状来看&#xff0c;其实做黄金代理很不错的。在股票市场中&#xff0c;投资者只能通过买涨进盈利&#xff0c;所以当市场行情不好的时候&#xff0c;股票经纪人的业务将很难展开&#xff0c;而现货黄金投资者不一样&#xff0…...

BCSP-玄子Share-Java框基础_双系统Redis安装与基础语法

四、Redis 4.1 Redis 简介 Redis 是开源、高性能的key-value数据库&#xff0c;属于 NoSQL 数据库 NoSQL 数据库与关系型数据库 关系型数据库&#xff1a;采用关系模型来组织数据&#xff0c;主要用于存储格式化的数据结构NoSQL 数据库&#xff1a;泛指非关系型数据库&…...

android system_server WatchDog简介

简介 android系统中SystemServer WatchDog的主要作用是监控SystemServer进程的运行状态,防止其卡住或者死锁。 具体来说,watchDog线程会定期去检查SystemServer线程的运行情况。如果发现SystemServer线程超过一定时间未有响应,watchDog会认为SystemServer进程发生了问题,这时…...

华为---OSPF协议优先级、开销(cost)、定时器简介及示例配置

OSPF协议优先级、开销、定时器简介及示例配置 路由协议优先级&#xff1a;由于路由器上可能同时运行多种动态路由协议&#xff0c;就存在各个路由协议之间路由信息共享和选择的问题。系统为每一种路由协议设置了不同的默认优先级&#xff0c;当在不同协议中发现同一条路由时&am…...

MEMORY-VQ: Compression for Tractable Internet-Scale Memory

本文是深度学习相关文章&#xff0c;针对《MEMORY-VQ: Compression for Tractable Internet-Scale Memory》的翻译。 MEMORY-VQ&#xff1a;可追溯互联网规模存储器的压缩 摘要1 引言2 背景3 MEMORY-VQ4 实验5 相关工作6 结论 摘要 检索增强是一种强大但昂贵的方法&#xff0…...

Netty—ChannelHandler

文章目录 一、Channel、ChannelPipeline 以及ChannelHandler 三者的关系❓二、ChannelHandler 是什么&#xff1f;&#x1f914;️三、ChannelInboundHandler四、ChannelOutboundHandler 一、Channel、ChannelPipeline 以及ChannelHandler 三者的关系❓ 通过以上对Channel和Ch…...

Android 集成onenet物联网平台

一&#xff0c;在Android应用程序中集成OneNet物联网平台&#xff0c;您可以按照以下步骤进行操作&#xff1a; 注册OneNet账户&#xff1a;首先&#xff0c;您需要在OneNet官方网站上注册一个账户。访问OneNet网站&#xff08;https://open.iot.10086.cn/ ↗&#xff09;&…...

java八股文面试[JVM]——如何打破双亲委派模型

双亲委派模型的第一次“被破坏”是重写自定义加载器的loadClass(),jdk不推荐。一般都只是重写findClass()&#xff0c;这样可以保持双亲委派机制.而loadClass方法加载规则由自己定义&#xff0c;就可以随心所欲的加载类&#xff0c;典型的打破双亲委派模型的框架和中间件有tomc…...

一加11/Ace2/10Pro手机如何实现全局120HZ高刷-游戏超级流畅效果

已经成功root啦。安卓13目前也一样支持LSPosed框架&#xff0c;如果你对LSP框架有需求&#xff0c;也可以使 自测120HZ刷新率诞生以后&#xff0c;很多小伙伴用上了就很难回来啦&#xff0c;一加11/Ace2/10Pro/9pro手 机厂商也对新机做了很多的适配&#xff0c;让我们日常使用起…...

微服务主流框架概览

微服务主流框架概览 目录概述需求&#xff1a; 设计思路实现思路分析1.HSF2.Dubbo 3.Spring Cloud5.gRPC Service mesh 参考资料和推荐阅读 Survive by day and develop by night. talk for import biz , show your perfect code,full busy&#xff0c;skip hardness,make a be…...

Python Flask Web开发二:数据库创建和使用

前言 数据库在 Web 开发中起着至关重要的作用。它不仅提供了数据的持久化存储和管理功能&#xff0c;还支持数据的关联和连接&#xff0c;保证数据的一致性和安全性。通过合理地设计和使用数据库&#xff0c;开发人员可以构建强大、可靠的 Web 应用程序&#xff0c;满足用户的…...

快速学会git版本管理——上传gitee仓库

首先在gitee右上角有一个新建仓库 创建之后打开自己想要上传的文件 右键打开 Git Bash Here 接下来会弹出git的窗口 首先先初始化仓库 用git命令 git init 然后用git add . 上传所有文件上传到暂存区(上一篇文章说过add是单个文件&#xff0c;add . 是所有文件) 没有显示错误 …...

应用在智能洗衣机触摸屏上的电容式触摸芯片

智能型全自动洗衣机可以自动判断水温、水位、衣质衣量、衣物的脏污情况&#xff0c;决定投放适量的洗涤剂和的洗涤程序。当洗衣桶内衣物的多少和质地不同&#xff0c;而注入水使其达到相同的水位时&#xff0c;其总重量是不同的。利用这一点&#xff0c;通过对洗衣电动机低速转…...

npm版本升级报错

解决方法&#xff1a; 执行npm install --legacy-peer-deps依赖对等 npm install xxx --legacy-peer-deps命令用于绕过peerDependency里依赖的自动安装&#xff1b;它告诉npm忽略项目中引入的各个依赖模块之间依赖相同但版本不同的问题&#xff0c;以npm v4-v6的方式去继续执行…...

国防科技大学计算机基础课程笔记02信息编码

1.机内码和国标码 国标码就是我们非常熟悉的这个GB2312,但是因为都是16进制&#xff0c;因此这个了16进制的数据既可以翻译成为这个机器码&#xff0c;也可以翻译成为这个国标码&#xff0c;所以这个时候很容易会出现这个歧义的情况&#xff1b; 因此&#xff0c;我们的这个国…...

[2025CVPR]DeepVideo-R1:基于难度感知回归GRPO的视频强化微调框架详解

突破视频大语言模型推理瓶颈,在多个视频基准上实现SOTA性能 一、核心问题与创新亮点 1.1 GRPO在视频任务中的两大挑战 ​安全措施依赖问题​ GRPO使用min和clip函数限制策略更新幅度,导致: 梯度抑制:当新旧策略差异过大时梯度消失收敛困难:策略无法充分优化# 传统GRPO的梯…...

装饰模式(Decorator Pattern)重构java邮件发奖系统实战

前言 现在我们有个如下的需求&#xff0c;设计一个邮件发奖的小系统&#xff0c; 需求 1.数据验证 → 2. 敏感信息加密 → 3. 日志记录 → 4. 实际发送邮件 装饰器模式&#xff08;Decorator Pattern&#xff09;允许向一个现有的对象添加新的功能&#xff0c;同时又不改变其…...

Admin.Net中的消息通信SignalR解释

定义集线器接口 IOnlineUserHub public interface IOnlineUserHub {/// 在线用户列表Task OnlineUserList(OnlineUserList context);/// 强制下线Task ForceOffline(object context);/// 发布站内消息Task PublicNotice(SysNotice context);/// 接收消息Task ReceiveMessage(…...

安宝特方案丨XRSOP人员作业标准化管理平台:AR智慧点检验收套件

在选煤厂、化工厂、钢铁厂等过程生产型企业&#xff0c;其生产设备的运行效率和非计划停机对工业制造效益有较大影响。 随着企业自动化和智能化建设的推进&#xff0c;需提前预防假检、错检、漏检&#xff0c;推动智慧生产运维系统数据的流动和现场赋能应用。同时&#xff0c;…...

【C++从零实现Json-Rpc框架】第六弹 —— 服务端模块划分

一、项目背景回顾 前五弹完成了Json-Rpc协议解析、请求处理、客户端调用等基础模块搭建。 本弹重点聚焦于服务端的模块划分与架构设计&#xff0c;提升代码结构的可维护性与扩展性。 二、服务端模块设计目标 高内聚低耦合&#xff1a;各模块职责清晰&#xff0c;便于独立开发…...

MySQL账号权限管理指南:安全创建账户与精细授权技巧

在MySQL数据库管理中&#xff0c;合理创建用户账号并分配精确权限是保障数据安全的核心环节。直接使用root账号进行所有操作不仅危险且难以审计操作行为。今天我们来全面解析MySQL账号创建与权限分配的专业方法。 一、为何需要创建独立账号&#xff1f; 最小权限原则&#xf…...

Caliper 配置文件解析:fisco-bcos.json

config.yaml 文件 config.yaml 是 Caliper 的主配置文件,通常包含以下内容: test:name: fisco-bcos-test # 测试名称description: Performance test of FISCO-BCOS # 测试描述workers:type: local # 工作进程类型number: 5 # 工作进程数量monitor:type: - docker- pro…...

根目录0xa0属性对应的Ntfs!_SCB中的FileObject是什么时候被建立的----NTFS源代码分析--重要

根目录0xa0属性对应的Ntfs!_SCB中的FileObject是什么时候被建立的 第一部分&#xff1a; 0: kd> g Breakpoint 9 hit Ntfs!ReadIndexBuffer: f7173886 55 push ebp 0: kd> kc # 00 Ntfs!ReadIndexBuffer 01 Ntfs!FindFirstIndexEntry 02 Ntfs!NtfsUpda…...

深入浅出Diffusion模型:从原理到实践的全方位教程

I. 引言&#xff1a;生成式AI的黎明 – Diffusion模型是什么&#xff1f; 近年来&#xff0c;生成式人工智能&#xff08;Generative AI&#xff09;领域取得了爆炸性的进展&#xff0c;模型能够根据简单的文本提示创作出逼真的图像、连贯的文本&#xff0c;乃至更多令人惊叹的…...