ORM mybits mybits-plus

ORM

ORM 即对象关系映射(Object Relational Mapping),是一种程序设计技术,用于实现面向对象编程语言里不同类型系统的数据之间的转换。下面从基本概念、工作原理、优势与劣势、常见的 ORM 框架等方面详细介绍 ORM。

常见的orm框架有:Mybatis-plus(ibatis)、Hibernate、Jpa。

基本概念

在软件开发中,面向对象编程(OOP)使用对象来表示数据和处理逻辑,而关系型数据库(RDBMS)则使用表、行和列来存储数据。这两种模型在数据表示和操作方式上存在差异,ORM 就是为了解决这种差异而出现的技术。它将数据库中的表映射为对象,表中的行映射为对象的实例,列映射为对象的属性,从而让开发者可以使用面向对象的方式来操作数据库,而无需编写复杂的 SQL 语句。

工作原理

ORM 框架的核心工作流程如下:

  1. 映射配置:开发者需要定义对象和数据库表之间的映射关系。这可以通过注解、XML 配置文件等方式来实现。例如,在 Java 中使用 Hibernate 框架时,可以使用 @Entity@Table@Column 等注解来指定对象和表的映射关系。
  2. 对象操作:开发者使用面向对象的方式对对象进行创建、读取、更新和删除(CRUD)操作。例如,创建一个对象实例并设置其属性值,然后调用 ORM 框架提供的方法将对象保存到数据库中。
  3. SQL 生成:ORM 框架根据对象的操作和映射配置,自动生成相应的 SQL 语句。例如,当调用保存对象的方法时,ORM 框架会生成 INSERT 语句;当调用查询对象的方法时,会生成 SELECT 语句。
  4. 数据库交互:ORM 框架将生成的 SQL 语句发送到数据库执行,并将数据库返回的结果集转换为对象实例。例如,将查询结果集中的每一行数据转换为一个对象实例,并将列值赋给对象的属性。

优势

  • 提高开发效率:开发者可以使用面向对象的方式操作数据库,避免编写大量的 SQL 语句,减少了开发时间和工作量。
  • 降低代码耦合度:将数据库操作封装在 ORM 框架中,使业务逻辑和数据库操作分离,提高了代码的可维护性和可测试性。
  • 支持跨数据库:ORM 框架可以屏蔽不同数据库之间的差异,开发者可以在不修改业务代码的情况下切换数据库。

劣势

  • 性能开销:ORM 框架需要进行对象和数据库之间的映射和转换,会带来一定的性能开销。在处理大量数据或复杂查询时,性能可能不如原生 SQL。
  • 学习成本:使用 ORM 框架需要学习框架的使用方法和配置规则,对于初学者来说可能有一定的学习成本。
  • 复杂查询受限:对于一些复杂的 SQL 查询,ORM 框架可能无法直接支持,需要编写原生 SQL 语句。

常见的 ORM 框架

  • Java 中的 Hibernate:是一个广泛使用的 Java ORM 框架,功能强大,支持多种数据库,提供了丰富的映射配置和查询功能。
  • Java 中的 MyBatis:是一个轻量级的 Java ORM 框架,它允许开发者灵活地编写 SQL 语句,同时也提供了对象映射功能。
  • Python 中的 SQLAlchemy:是一个流行的 Python ORM 框架,支持多种数据库,提供了高级的查询和事务管理功能。
  • .NET 中的 Entity Framework:是微软官方提供的 .NET ORM 框架,与 .NET 平台紧密集成,支持多种数据库。

实现面向对象编程语言里,不同类型系统的数据之间转换

Java           数据库

Integer      Integer

String         varchar

ORM的优点:

最大的优势隐藏了数据访问细节,“封闭”的通用数据库交互,ORM的核心。他使得我们的通用数据库交互变得简单易行,并且完全不用考虑该死的SQL语句。快速开发,由此而来。

ORM的缺点:

 1,性能较低。无可避免的,自动化意味着映射和关联管理,代价是牺牲性能(早期,这是所有不喜欢ORM人的共同点)。现在的各种ORM框架都在尝试使用各种方法来减轻这块(LazyLoad,Cache),效果还是很显著的。

 2,对多表查询力不从心。

JDBC(Java Database Connectivity)

概念

JDBC 是 Java 编程语言用于与数据库进行交互的标准 API,它为 Java 开发人员提供了一种统一的方式来访问各种不同类型的数据库,如 MySQL、Oracle、SQL Server 等。通过 JDBC,开发者可以执行 SQL 语句,实现对数据库的增删改查操作。

工作原理

  1. 加载数据库驱动:不同的数据库有不同的 JDBC 驱动程序,需要使用 Class.forName() 方法加载相应的驱动类。
  2. 建立数据库连接:使用 DriverManager.getConnection() 方法,传入数据库的 URL、用户名和密码,建立与数据库的连接。
  3. 创建 Statement 对象:通过连接对象创建 StatementPreparedStatement 或 CallableStatement 对象,用于执行 SQL 语句。
  4. 执行 SQL 语句:使用 Statement 对象的 executeQuery()executeUpdate() 等方法执行 SQL 语句。
  5. 处理结果集:如果执行的是查询语句,会返回一个 ResultSet 对象,通过该对象可以遍历查询结果。
  6. 关闭资源:使用完数据库连接、Statement 对象和 ResultSet 对象后,需要关闭它们,以释放资源。

缺点:

  1. 编码繁琐,效率低(指的是编码效率低,重复代码多)。
  2. 数据库连接的创建和释放比较重复,也造成了系统资源的浪费
  3. 大量硬编码,缺乏灵活性,不利于后期维护
  4. 参数的赋值和数据的封装全是手动进行
try {//加载数据库驱动Class.forName("com.mysql.jdbc.Driver");//通过驱动管理类获取数据库链接Connection connection =     DriverManager.getConnection("jdbc:mysql://localhost:3306/test", "root", "123");//定义sql语句?表示占位符String sql = "select * from t_book where author = ?";//获取预处理statementPreparedStatement  preparedStatement = connection.prepareStatement(sql);//设置参数,第一个参数为sql语句中参数的序号(从1开始),第二个参数为设置的参数值preparedStatement.setString(1, "张三");//向数据库发出sql执行查询,查询出结果集ResultSet  resultSet =  preparedStatement.executeQuery();//遍历查询结果集bookList = new ArrayList<>();while(resultSet.next()){Book book=new Book();book.setId(resultSet.getInt("id"));book.setName(resultSet.getString("bname"));book.setAuthor(resultSet.getString("author"));book.setPrice(resultSet.getDouble("price"));bookList.add(book);}} catch (Exception e) {}finally{//释放资源resultSet.close();preparedStatement.close();connection.close();    }

第一类:着重对JDBC进行API层的抽取和封装,以及功能的增强,

典型代表是Apache的DbUtils。

第二类:借鉴面向对象的思想,让程序员以操作对象的方式操作数据库,无需编写sql语句,典型代表是ORM(mybits )。

JDBC有四个核心对象:
(1)DriverManager,用于注册数据库连接
(2)Connection,与数据库连接对象
(3)Statement/PrepareStatement,操作数据库SQL语句的对象
(4)ResultSet,结果集或一张虚拟表

Mybatis

 集成第三方分页插件(如 PageHelper)

待完善

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

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

相关文章

网络编程—网络概念

目录 1 网络分类 1.1 局域网 1.2 广域网 2 常见网络概念 2.1 交换机 2.2 路由器 2.3 集线器 2.4 IP地址 2.5 端口号 2.6 协议 3 网络协议模型 3.1 OSI七层模型 3.2 TCP/IP五层模型 3.3 每层中常见的协议和作用 3.3.1 应用层 3.3.2 传输层 3.3.3 网络层 3.3.4…

4月3日工作日志

一个朴实无华的目录 今日学习内容&#xff1a;1.关系数据库 今日学习内容&#xff1a; 1.关系数据库

git commit Message 插件解释说明

- feat - 一项新功能 - fix - 一个错误修复 - docs - 仅文档更改 - style - 不影响代码含义的更改&#xff08;空白、格式化、缺少分号等&#xff09; - refactor - 既不修复错误也不添加功能的代码更改 - perf - 提高性能的代码更改 - build - 影响构建系统或外部依赖项…

ngx_open_file

定义在 src\os\unix\ngx_files.h #define ngx_open_file(name, mode, create, access) \open((const char *) name, mode|create, access) name&#xff1a;文件名&#xff08;通常是一个字符串&#xff09;。mode&#xff1a;文件打开模式&#x…

23种设计模式-行为型模式-责任链

文章目录 简介问题解决代码核心改进点&#xff1a; 总结 简介 责任链是一种行为设计模式&#xff0c;允许你把请求沿着处理者链进行发送。收到请求后&#xff0c;每个处理者均可对请求进行处理&#xff0c;或将其传递给链上的下个处理者。 问题 假如你正在开发一个订单系统。…

注意力机制在大语言模型中的原理与实现总结

注意力机制在大语言模型中的原理与实现总结 1. 章节介绍 在大语言模型的学习中&#xff0c;理解注意力机制至关重要。本章节旨在深入剖析注意力机制的原理及其在大语言模型中的应用&#xff0c;为构建和优化大语言模型提供理论与实践基础。通过回顾神经网络基础及传统架构的局…

kafka消息可靠性传输语义

Kafka提供了多种消息传递语义&#xff0c;以适应不同的业务需求和可靠性要求。以下是Kafka消息传输的可靠性语义及其实现机制&#xff1a; 1. At Most Once&#xff08;至多一次&#xff09; 语义&#xff1a;消息可能会丢失&#xff0c;但不会被重复传递。 实现机制&#xf…

NLP高频面试题(三十三)——Vision Transformer(ViT)模型架构介绍

Transformer架构在自然语言处理领域取得了显著成功&#xff0c;激发了研究人员将其应用于计算机视觉任务的兴趣。Vision Transformer&#xff08;ViT&#xff09;应运而生&#xff0c;成为图像分类等视觉任务中的新兴架构。本文将介绍ViT的基本架构、工作原理&#xff0c;并与传…

Oracle数据库数据编程SQL<3.6 PL/SQL 包(Package)>

包是Oracle数据库中一种重要的PL/SQL程序结构,它将逻辑相关的变量、常量、游标、异常、过程和函数组织在一起,提供了更好的封装性和模块化。在大型项目中,可能有很多模块,而每一个模块又有自己的存过、函数等。而这些存过、函数默认是放在一起的,如果所有的存过函数都是放…

机器学习 分类算法

【实验名称】 实验&#xff1a;分类算法 【实验目的】 1.了解分类算法理论基础 2.平台实现算法 3. 编程实现分类算法 【实验原理】 分类(Categorization or Classification)就是按照某种标准给对象贴标签(label),再根据标签来区分归类。 【实验环境】 OS&#xff1a;Ubuntu16.0…

HTML5 Canvas绘画板项目实战:打造一个功能丰富的在线画板

HTML5 Canvas绘画板项目实战&#xff1a;打造一个功能丰富的在线画板 这里写目录标题 HTML5 Canvas绘画板项目实战&#xff1a;打造一个功能丰富的在线画板项目介绍技术栈核心功能实现1. 画板初始化与工具管理2. 多样化绘画工具3. 事件处理机制 技术要点分析1. Canvas上下文优化…

【YOLOv8】YOLOv8改进系列(12)----替换主干网络之StarNet

主页&#xff1a;HABUO&#x1f341;主页&#xff1a;HABUO &#x1f341;YOLOv8入门改进专栏&#x1f341; &#x1f341;如果再也不能见到你&#xff0c;祝你早安&#xff0c;午安&#xff0c;晚安&#x1f341; 【YOLOv8改进系列】&#xff1a; YOLOv8结构解读 YOLOv8…

1Panel 面板 宝塔面板 Ubuntu 24.04

1Panel 面板 宝塔面板 Ubuntu 24.04 https://1panel.cn/ 1Panel 是一款开源的 Linux 服务器运维管理面板&#xff0c;它就像是给服务器配上了一个智能管家&#xff0c;让我们能通过 Web 端轻松管理服务器。以往我们管理 Linux 服务器&#xff0c;常常需要在命令行中输入各种复…

Node.js全局生效的中间件

目录 1. 目录结构 2. 代码实现 2.1 安装Express 2.2 app.js - 主文件 2.3 globalMiddleware.js - 全局中间件 3. 程序运行结果 4. 总结 在Node.js的Express框架中&#xff0c;全局生效的中间件是指应用程序启动后&#xff0c;对所有请求都有效的中间件。它通常用于日志记…

WiFi(无线局域网)技术的多种工作模式

WiFi&#xff08;无线局域网&#xff09;技术支持多种工作模式&#xff0c;以满足不同的网络需求和应用场景。以下是主要的WiFi工作模式及其详细说明&#xff1a; 1. 基础设施模式&#xff08;Infrastructure Mode&#xff09; [无线接入点 (AP)]/ | \ [客户端…

PHP 8.x:现代Web开发的性能与效率革命

随着PHP 8.x系列的持续演进&#xff0c;这门诞生于1995年的“古老”语言正焕发新生。通过引入革命性的JIT编译器、类型系统增强及一系列现代化语法特性&#xff0c;PHP 8.x不仅巩固了其在Web开发领域的统治地位&#xff0c;更将性能与开发者体验推向新高度。 一、JIT编译器&am…

【扣子agent入门】搭建计算热量工作流

一、食物热量知识库 1. 创建知识库 工作空间——资源库——创建资源>知识库 2. 自动采集网页数据 文本格式>在线数据 自动采集 找一个食物热量网站进行采集。 一定要让知识按条数分段&#xff0c;不然不好查询。 二、 意图识别节点 意图识别&#xff08;In…

脑影像分析软件推荐 | JuSpace

目录 1. 软件界面 2.工具包功能简介 3.软件安装注意事项 参考文献&#xff1a; Dukart J, Holiga S, Rullmann M, Lanzenberger R, Hawkins PCT, Mehta MA, Hesse S, Barthel H, Sabri O, Jech R, Eickhoff SB. JuSpace: A tool for spatial correlation analyses of magne…

微信小程序唤起app

1、前提 1、app与小程序主体需一致&#xff0c;可以前往微信公众平台关联。 2、小程序的场景值为1069&#xff0c;也就是得从app打开小程序&#xff0c;小程序才能唤起app。 2、vue3代码示例 <template><view class"maxBox bgc"><button open-typ…

jarvisoj API调用 [JSON格式变XXE]

http://web.jarvisoj.com:9882/ 题目要求&#xff1a;请设法获得目标机器 /home/ctf/flag.txt 中的flag值 抓包得到&#xff1a; POST /api/v1.0/try HTTP/1.1 Host: web.jarvisoj.com:9882 Content-Length: 36 Accept-Language: zh-CN,zh;q0.9 User-Agent: Mozilla/5.0 (W…