浅谈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.mzph.cn/news/693430.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Android 基础技术——Framework

笔者希望做一个系列,整理 Android 基础技术,本章是关于 Framework 简述 Android 系统启动流程 当按电源键触发开机,首先会从 ROM 中预定义的地方加载引导程序 BootLoader 到 RAM 中,并执行 BootLoader 程序启动 Linux Kernel&…

使用Flex布局在HTML中实现双行夹批效果

古代小说中经常有评点和批注,为了区别正文和批注,一般将批注排版成双行夹批的形式。我们知道,在Word中只需要先选择批注文字,然后通过“开始”菜单“段落”面板上字符缩放工具组里的“双行合一”命令,就可以很容易实现…

Android13 针对low memory killer内存调优

引入概念 在旧版本的安卓系统中,当触发lmk(low memory killer)的时候一般认为就是内存不足导致,但是随着安卓版本的增加lmk的判断标准已经不仅仅是内存剩余大小,io,cpu同样会做评判,从而保证设备…

vue实现列表自动无缝滚动列表

大家好,今天给大家分享的知识是vue基于vue-seamless-scroll实现自动无缝滚动列表 一、实现自动滚动 最近在开发过程中遇到一个问题,就是需要实现自动滚动列表,效果图如下 就是这样一个列表在自动循环展示。在这里我是运用的 vue-seamless-sc…

HTTP的详细介绍

目录 一、HTTP 相关概念 二、HTTP请求访问的完整过程 1、 建立连接 2、 接收请求 3、 处理请求 3.1 常见的HTTP方法 3.2 GET和POST比较 4、访问资源 5、构建响应报文 6、发送响应报文 7、记录日志 三、HTTP安装组成 1、常见http 服务器程序 2、apache介绍和特点 …

专转本的三道难关

道阻且长,路途中的艰辛只有亲身经历过转本的人才能感同身受,这三道难关也是每个升本人都会经历的。尤其是最后一个(o(╥﹏╥)o)!!! 01 选择大于努力 很多人想专转本都是为了圆本科的梦&a…

redis的缓存穿透,缓存并发,缓存雪崩,缓存问题及解决方案

缓存穿透 问题原因 解决方案 缓存并发 缓存雪崩 缓存失效时间设置一致导致的。 解决方案: 1)方案一 2)方案二 如何设计一个缓存策略,缓存热点数据?

实现RAG管道中的上下文压缩和过滤

每日推荐一篇专注于解决实际问题的外文,精准翻译并深入解读其要点,助力读者培养实际问题解决和代码动手的能力。 欢迎关注公众号(NLP Research),及时查看最新内容 原文标题:Implement Contextual Compression And Filtering In RAG Pipeline 原文地址:https://medium.…

新版AI系统ChatGPT源码支持GPT-4/支持AI绘画去授权

源码获取方式 搜一搜:万能工具箱合集 点击资源库直接进去获取源码即可 如果没看到就是待更新,会陆续更新上 新版AI系统ChatGPT网站源码支持GPT-4/支持AI绘画/Prompt应用/MJ绘画源码/PCH5端/免授权,支持关联上下文,意间绘画模型…

[极客挑战2019]HTTP

这道题考察的是http请求头字段的含义和使用; 具体如下 Referer:来源地址 User-Agent:客户端配置信息:浏览器类型、版本、系统类型等 X-Forwarded-For:代理地址,即数据发出的地址 开始解题:(对我这初学者真的烧脑&a…

Qt应用-视频播放器实例

本文讲解Qt视频播放器应用实例。 实现功能 视频的播放暂停、拖动进度控制,声音控制播放列表控制播放区域的暂停控制,全屏控制等。 界面设计 <?xml version="1.0" encoding="UTF-8"?> <ui version="4.0"><class>frmVide…

深度学习在时间序列预测的总结和未来方向分析

2023年是大语言模型和稳定扩散的一年&#xff0c;时间序列领域虽然没有那么大的成就&#xff0c;但是却有缓慢而稳定的进展。Neurips、ICML和AAAI等会议都有transformer 结构(BasisFormer、Crossformer、Inverted transformer和Patch transformer)的改进&#xff0c;还出现了将…

压缩感知(Compressed Sensing)的MATLAB仿真实现

在前一篇文章&#xff1a;正交匹配追踪&#xff08;Orthogonal Matching Pursuit, OMP&#xff09;的MATLAB实现中&#xff0c;我们介绍了针对稀疏信号进行压缩感知的MATLAB仿真。 本篇我们介绍一下针对的是原始的非稀疏信号&#xff0c;看看如何进行处理。 本文中&#xff0c;…

读懂2024年数字孪生发展新趋势!十大权威白皮书放送!

2024年&#xff0c;数字孪生 该往哪些方向走&#xff1f; 新技术的不断涌现 又会带来怎样的行业变迁 …… 在开工之际&#xff0c;我们整理了 51WORLD主导、参编的 十大权威数字孪生白皮书、行业报告 以及产业优秀案例集 分享给想要提升自我的朋友们 读完这些 上面看似…

不止提升免疫力?NMN或可预防、缓解支原体肺炎造成的肺部损伤

近期&#xff0c;全国多地进入呼吸道疾病高发季&#xff0c;支原体肺炎等相关话题频频登上各大热搜榜。 发烧、咳嗽、嗓子疼、肺炎……支原体肺炎的战线拉得挺长&#xff0c;过年了都还有不少人纷纷中招&#xff1a;发热、咳嗽&#xff0c;来来回回拖了一两周才好&#xff0c;…

JavaScript 设计模式之组合模式

组合模式 在我们日常中肯呢个会将一个表单用这种模式来创建 const Car function () { } Car.prototype.getName function () { throw new Error("需要重写该方法") } Car.prototype.getPrice function () {throw new Error("需要重写该方法") } const…

突破性创新:OpenAI推出Sora视频模型,预示视频制作技术的未来已到来!

一、前言 此页面上的所有视频均由 Sora 直接生成&#xff0c;未经修改。 OpenAI - Sora is an AI model that can create realistic and imaginative scenes from text instructions. 2024 年 2 月 16 日&#xff0c;OpenAI 发布 AI 视频模型 Sora&#xff0c;60 秒的一镜到底…

XML Map 端口进阶篇——常用关键字和格式化器详解

XML Map 端口是用于在不同XML之间建立关系映射的工具&#xff0c;允许通过拖拽操作实现源XML和目标 XML之间的数据字段映射&#xff0c;除此之外&#xff0c;XML Map 端口还提供了其它丰富多彩的功能&#xff0c;使用户能够更加灵活和高效的处理XML 数据映射任务&#xff0c;让…

以程序员的视角,看前后端分离的是否必要?

Hello&#xff0c;我是贝格前端工场&#xff0c;本篇分享一个老生常谈的话题&#xff0c;前后端分离是必然趋势&#xff0c;但也是要区分具体的场景&#xff0c;欢迎探讨&#xff0c;关注&#xff0c;有前端开发需求可以私信我&#xff0c;上车了。 一、什么是前后端分离和不分…

Bert-VITS-2 效果挺好的声音克隆工具

持中日英三语训练和推理。内置干声分离&#xff0c;切割和标注工具&#xff0c;开箱即用。请点下载量右边的符号查看镜像所对应的具体版本号。 教程地址&#xff1a; sjj​​​​​​​CodeWithGPU | 能复现才是好算法CodeWithGPU | GitHub AI算法复现社区&#xff0c;能复现…