浅谈ORM框架

文章目录

  • 一、什么是ORM框架?
  • 二、常见的ORM框架(持久层框架)
    • 2.0 什么是持久化
    • 2.1 Hibernate
      • 2.1.1、Hibernate的使用步骤
    • 2.2 mybatis
    • 2.3 mybatis plus
    • 2.4 jpa springdata
    • 2.5 jfinal
  • 三、ORM框架的优缺点?
    • 3.1 优点
      • 3.1.1、减少代码的重复量,提高代码的复用率
      • 3.1.2、使开发更加对象化
      • 3.1.3、使数据库结构文档化
      • 3.1.4、ORM框架包含CRUD的API
      • 3.1.5、可移植
    • 3.2 缺点

一、什么是ORM框架?

     ORM是Object Relational Mapping(对象——关系映射)的简称。
     ORM框架是一种解决面向对象编程(Java…)与关系型数据库(MySql、Oracle、DB2、Sql Server、Access)中数据类型不匹配的技术。描述Java对象与关系型数据库里的表的映射关系,自动将Java程序中的对象持久化到数据库表中。
在这里插入图片描述
     业务实体具有两种表现形式:在内存中表现为对象,在关系型数据库中表现为关系数据。内存中的对象通过继承、实现等方式可以存在多种关系,而数据库中的关系数据无法直接表达多对多关联和继承关系。因此一般ORM以中间件的形式存在,来实现程序对象到关系型数据库中关系数据的一一映射。

二、常见的ORM框架(持久层框架)

2.0 什么是持久化

     让数据持久化。数据一般保存在内存中,但是内存中保存数据有一个缺点就是断电即失。因此起初计算机保存数据让其持久化的手段是使用JDBC或者IO流让数据以文件的形式长久存储起来。随着业务需求场景的不断变化,逐渐衍生出将数据持久保存到数据库中来实现数据的持久化。那为什么要进行数据持久化呢??1、对于计算机来说,用户的数据需要完整的被保护并且安全存储,以便用户能够安心且正常的使用程序。2、内存昂贵。同等价格的内存和硬盘,内存其大小是硬盘的小一半。

     什么是持久层??以往我们还学过DAO层、service层、controller层、resposity层…一个层对应完成相应工作的代码块。持久层就是完成持久化工作的代码块。层与层之间的界限十分明显。

2.1 Hibernate

     Hibernate是一个 全表映射 的ORM框架,程序员一般只需要定义好持久化对象和数据库中的表的关系映射,就可以通过Hibernate框架提供的方法完成持久层操作。
譬如:某个数据库中具有下图的两张表,此时就可以在代码中定义出与数据库中的表相同的对象,此处的相同指的是:对象的命名、对象中的成员变量。

2.1.1、Hibernate的使用步骤

1、导入相关依赖
在pom.xml文件中添加3个依赖。分别是JDBC驱动包、hibernate依赖、lombok。
在这里插入图片描述
2、创建 Hibernate 配置文件
在resources(外部资源)包中创建名为hibernate.cfg.xml的配置文件。
在这里插入图片描述
3、创建实体类

4、创建 实体类-关系映射文件(这一步很关键)
配置此文件之后,会将Java类映射成数据库中的表,这个文件会配置实体类跟数据库表的关系。
在这里插入图片描述

在这里插入图片描述

5、写好的实体类——关系映射文件注册到Hibernate配置文件
写好的实体类——关系映射文件需要注册到Hibernate配置文件中,配置的实体类——关系映射文件才会生效。将上述第二步的配置文件hibernate.cfg.xml中添加如下内容,此时即可将实体类——关系映射文件注册到hibernate配置文件中。
在这里插入图片描述
6、调用 Hibernate API 完成操作

2.2 mybatis

     mybatis是一款优秀的持久层框架,它支持定制sql、存储过程、以及高级映射。mybatis避免了几乎所有的JDBC代码和手动设置参数以及设置结果集。 mybatis可以使用简单的xml或者注解来配置和映射原生类型、接口和Java的POJO(Plain Old Java Object 普通老式Java对象)为数据库中的记录。

     mybatis的使用步骤以及更详细的资料待我后续学习后补充,同学们也可以自行搜索其他资料进行学习。

2.3 mybatis plus

     mybatis plus 是基于mybatis的国内开源框架,其基于mybatis进行了进一步封装,是mybatis的增强,在mybatis的基础上不做改变,只为了简化开发、提高效率。

     mybatis的使用步骤以及更详细的资料待我后续学习后补充,同学们也可以自行搜索其他资料进行学习。

2.4 jpa springdata

     springdata也是一个持久层框架,实现数据持久化他既支持关系型数据库,也支持非关系数据库,springdata将我们的数据存储进行了统一,提高了开发效率,降低了学习效率。

     springdata的使用步骤以及更详细的资料待我后续学习后补充,同学们也可以自行搜索其他资料进行学习。

2.5 jfinal

三、ORM框架的优缺点?

3.1 优点

3.1.1、减少代码的重复量,提高代码的复用率

     当我们实现一个系统时,不使用ORM框架,而是直接使用JDBC将程序代码与数据库进行连接的话,我们可能会写特别多数据访问层的代码,譬如读取对象信息、删除数据、查找数据、保存数据、修改数据…这些代码大部分都是重复的。使用ORM框架会大大减少重复性的代码,提高开发效率,降低开发成本。ORM框架(Object Relational Mapping 对象关系映射),主要实现程序对象与关系型数据库中的关系数据的映射。

     举个例子:之前写过一个servlet的项目,在这个servlet项目中,后端程序代码与数据库的连接使用的是JDBC的方式。
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
     而在使用了springboot框架完成的项目中,后端程序代码访问数据库将变得简单。这是因为springboot框架中集成了许多ORM框架,譬如mybatis、jpa springdata…程序员在编写代码的时候可以按照自己的项目需求去选择合适自己的ORM框架添加到自己的springboot框架中。
在这里插入图片描述

3.1.2、使开发更加对象化

     ORM框架以最基本的形式建模数据。在后端程序代码编程中,会将数据库中的一张张表映射成程序中的一个个对象,一个对象对应一张表,表中的字段与对象中的成员变量对应。

3.1.3、使数据库结构文档化

     使用ORM框架时,数据库会被转换为Java程序员容易读懂的Java类(对象),如果程序员对数据库的sql语句了解较浅,此时Java程序员只需要把注意力放在他擅长的Java代码层面上。

3.1.4、ORM框架包含CRUD的API

     ORM框架会将数据库中的sql语句封装成编程语言中的函数,例如create()、update()、save()、load()…,程序员可以通过函数的链式组合,生成最终的sql语句。通过这样的封装,形成了代码风格的统一性,避免了代码冗余以及不规范的特点。

3.1.5、可移植

3.2 缺点

     1、通过ORM框架实现对象与关系数据的映射,可能会加重操作系统的负担,消耗内存、消耗系统性能。
     2、在进行多表查询或者子查询、联合查询、条件查询…这些复杂查询时,ORM语句会变得复杂起来,对于初入编程的新手来说,难以理解。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.xdnf.cn/news/1113668.html

如若内容造成侵权/违法违规/事实不符,请联系一条长河网进行投诉反馈,一经查实,立即删除!

相关文章

堆的结构实现与应用

目录 前言: 1.认识堆 a.如何认识堆? b.大根堆与小根堆 c.堆应用的简单认识 2.堆的结构与要实现的功能 3.向上调整算法 4.向下调整算法 5.向堆插入数据并建堆 6.堆的大小 7.堆的判空 8.取堆顶数据 9.删除堆顶数据 10.向上调整时间复杂度 11.向下调整时…

汇总利用YOLO8训练遇到的报错和解决方案(包含训练过程中验证阶段报错、精度报错、损失为Nan、不打印GFLOPs)

一、本文介绍 本文为专栏内读者和我个人在训练YOLOv8时遇到的各种错误解决方案,你遇到的问题本文基本上都能够解决,同时本文的内容为持续更新,定期汇总大家遇到的问题已经一些常见的问题答案,目前包含的问题已经解决方法汇总如下…

“替代云”知多少?Akamai Linode 重新定义公有云服务!

自2006年云计算概念提出以来,云产业已经成为数字化时代所必备的底层基础,但随着多元化的业务需求的增多,多云战略、本地部署所形成混合环境,都使得云复杂性,日渐成为了迫在眉睫的挑战。 451 Research 云价格指数 (CPI…

前端基础自学整理|HTML + JavaScript + DOM事件

目录 一、HTML 1、Html标签 2、Html元素 3、基本的HTML标签 二、CSS 样式 层叠样式表 三、JavaScript 使用示例 四、HTML DOM 通过可编程的对象模型,javaScript可以: window document 1、查找HTML元素 2、操作HTML元素 获取元素的属性 四…

Linux---进程间通讯(上)

一、进程间通讯的目的 数据传输:一个进程需要将它的数据发送给另一个进程资源共享:多个进程之间共享同样的资源。通知事件:一个进程需要向另一个或一组进程发送消息,通知它(它们)发生了某种事件&#xff0…

聚观早报 | OPPO公布全新AI战略;华为P70 Art影像细节曝光

聚观早报每日整理最值得关注的行业重点事件,帮助大家及时了解最新行业动态,每日读报,就读聚观365资讯简报。 整理丨Cutie 2月22日消息 OPPO公布全新AI战略 华为P70 Art影像细节曝光 苹果正加速开发智能戒指 微软将大规模投资人工智能 …

ArcgisForJS如何访问Arcgis Server?

文章目录 0.引言1.准备ArcGIS相关工具2.创建含有ArcSDE地理数据库的MXD文件3.注册ArcSDE地理数据库4.发布数据到Arcgis Server5.ArcgisForJS访问ArcGIS Server数据 0.引言 ArcGIS API for JavaScript 是一个用于在Web和移动应用程序中创建交互式地图和地理空间分析应用的库。它…

[word] 如何使用Excel制作简单的流程图 #媒体#微信#学习方法

如何使用Excel制作简单的流程图 对于在职场办公的朋友们来说,经常要使用到Excel演示公式,制作各种图表等等,其实Excel还可以制作简单的流程图呢,估计许多小伙伴们还不知道吧,今天就来给大家演示一下,看完就…

在VSCode中新配置一个ros项目

如何从零开始配置一个ros项目 预先准备初始化ros工程运行hello_ros进行第一个示例进行编译测试 预先准备 首先要在vscode中安装(必须安装的):ros,c,cmake,cmake tools(补全camkelist文件&#…

一个C#开发的大小只有8KB的贪吃蛇开源游戏!

大家好,我是编程乐趣。 今天给大家推荐基于C#开发的、一个贪吃蛇开源项目,这个项目除了实现贪吃蛇的功能外,重点是讲解如何把编译后的程序,从65MB精简为8KB。 项目地址 https://github.com/MichalStrehovsky/SeeSharpSnake 编译…

openssl3.2 - 编译 - zlib.dll不要使用绝对路径

文章目录 openssl3.2 - 编译 - 编译时的动态库zlib.dll不要使用绝对路径概述测试zlib特性在安装好的目录中是否正常笔记70-test_tls13certcomp.t80-test_cms.t对测试环境的猜测从头再编译测试安装一次测试一下随便改变位置的openssl用到zlib时是否好使测试一下随便改变位置的op…

为全志D1开发板移植LVGL日历控件和显示天气

利用TCP封装HTTP包请求天气信息 Linux还真是逐步熟悉中,现在才了解到Linux即没有原生的GUI,也没有应用层协议栈,所以要实现HTTP应用,必须利用TCP然后自己封装HTTP数据包。本篇即记录封装HTTP数据包,到心知天气请求天气…

javaSE多态

文章目录 斜体样式1.1 面向对象三大特征 ?1.2 什么是多态 ?*斜体样式*1.3 多态的前提1.4 多态的成员访问特点1.5 多态的优缺点1.6 多态的转型1.7 多态的转型注意1.8 解决转型安全隐患 2 内部类2.1 内部类的分类什么是内部类 ?什么时候使用内部类 ?内部类分类 ? 2.2 成员内…

【医学大模型】大模型 + 长期慢病的预测和管理

大模型 长期慢病的预测和管理 提出背景长期慢病框架慢性疾病检测框架如何实现多提示工程为什么使用多提示 慢性疾病管理框架个性化提示工程医学知识注入 提出背景 论文:https://arxiv.org/abs/2401.12988 慢性疾病是指那些需要长期管理和治疗的疾病,包…

PyTorch深度学习实战(37)——CycleGAN详解与实现

PyTorch深度学习实战(37)——CycleGAN详解与实现 0. 前言1. CycleGAN 基本原理2. CycleGAN 模型分析3. 实现 CycleGAN小结系列链接 0. 前言 CycleGAN 是一种用于图像转换的生成对抗网络(Generative Adversarial Network, GAN),可以在不需要配…

车灯裂了用什么胶修复?

当车灯出现裂缝、破口、缺损、裂痕、破裂、破损、崩角、掉角等问题时,可以使用车灯无痕修复专用UV胶进行修复。车灯无痕修复专用UV胶是一种经过处理的UV树脂胶,主要成份是改性丙烯酸UV树脂。应用在车灯的专业无痕修复领域。 具有如下特点: 1…

详细描述一下CrossOver2024版本的用途和作用?

当然可以。CrossOver 是一款由 CODE WEAVERS 公司开发的软件,其主要目标是在 macOS 和 Linux 系统上实现与 Windows 应用程序的兼容性。它不同于传统的虚拟机,如 Parallels 或 VMware,因为它并不在 macOS 上创建一个完整的 Windows 环境。相反…

基于机器学习的青藏高原高寒沼泽湿地蒸散发插补研究_王秀英_2022

基于机器学习的青藏高原高寒沼泽湿地蒸散发插补研究_王秀英_2022 摘要关键词 1 材料和方法1.1 研究区概况与数据来源1.2 研究方法 2 结果和分析2.1 蒸散发通量观测数据缺省状况2.2 蒸散发与气象因子的相关性分析2.3 不同气象因子输入组合下各模型算法精度对比2.4 随机森林回归模…

安卓系统签名方法

首先在源码中创建key目录用来存放我们需要的文件,一般需要build/target/product/security/platform.pk8,build/target/product/security/platform.x509.pem,然后执行命令openssl pkcs8 -inform DER -nocrypt -in platform.pk8 -out platform.…

9.vue学习笔记(组件传递Props校验+组件事件-组件传递数据+组件事件-配合“v-model”使用)

文章目录 1.组件传递Props校验1.1.默认值1.2.必选项1.3.注意事项:props 是只读的 2.组件事件-组件传递数据2.1.温馨提示:组件之间传递数据的方案 3.组件事件-配合“v-model”使用 1.组件传递Props校验 Vue组件可以更细致地声明对传入的 props 的校验要求…