【ORM】浅聊C#和Java的ORM底层框架
给自己一个目标,然后坚持一段时间,总会有收获和感悟!
国庆假期马上结束,闲暇时间,突然对Ado.Net这个词的由来感兴趣,然后就一顿复习了一遍,顺便也了解了下java关于ORM框架的底层是什么!
目录
- 一、什么是ADO
- 二、ADO.Net和ORM关系
- 三、常见ORM框架
- 四、C#底层技术
- 4.1、ADO.Net
- 4.2、数据库提供程序
- 4.3、映射引擎
- 4.4、查询语言
- 五、Java底层技术
- 5.1、JDBC(Java Database Connectivity)
- 5.2、数据库连接池
- 5.3、反射(Reflection)
- 5.4、缓存(Cache)
- 5.5、事务管理
一、什么是ADO
ADO(ActiveX Data Objects)并不是一个 ORM(对象关系映射)框架,而是一组用于访问数据的组件和接口。
ADO 提供了一种在应用程序中访问和操作数据库的方式,它是面向连接的、基于组件的框架。
ORM 框架则是一种用于简化数据库操作的技术,它通过将数据库表和对象之间进行映射,使得开发人员可以使用面向对象的方式来操作数据库。一些常见的 ORM 框架包括 Entity Framework、Hibernate 等。
二、ADO.Net和ORM关系
C# 的 ADO.Net 是一个用于访问和操作数据库的底层技术框架,它提供了一组类和接口,用于连接数据库、执行 SQL 查询和更新操作,以及处理数据的读取和写入。ADO.Net 是面向连接的、基于组件的框架,提供了直接的数据库访问能力。
ORM(对象关系映射)框架是建立在 ADO.Net 之上的高层抽象,它封装了对数据库的访问细节,并提供了面向对象的方式来进行数据库操作。ORM 框架通过将数据库表映射为对象,将查询结果映射为对象集合,从而简化了数据库操作的编写和维护工作。
在 C# 中,ADO.Net 和 ORM 框架之间存在一定的关系。一方面,ORM 框架通常会使用 ADO.Net 提供的底层数据库连接和执行功能,以实现对数据库的访问。在 ORM 框架中,它们会封装和扩展
ADO.Net 提供的一些类和接口,以提供更加便捷和高级的数据库操作功能。另一方面,如果需要更直接和细粒度地控制数据库操作,开发人员仍然可以直接使用 ADO.Net 的类和接口。
总结来说,ADO.Net 是用于直接访问和操作数据库的底层框架,而 ORM 框架是建立在 ADO.Net 之上的高级抽象,提供了更加方便和面向对象的方式来进行数据库操作。在开发中,可以根据具体需求和情况选择使用 ADO.Net 或 ORM 框架。
三、常见ORM框架
以下大概列举C#和Java常见的ORM框架,评论区大家说说你常用的是那个
编号 | 开发语言 | ORM框架 | 备注 |
---|---|---|---|
1 | C# | Entity Framework(EF) | EF 是微软官方推出的 ORM 框架,它支持多种数据库提供程序,并提供了强大的对象关系映射功能和 LINQ 查询语言的支持。 |
2 | C# | NHibernate | NHibernate 是一个成熟的开源 ORM 框架,它是 Hibernate 在 .NET 平台上的移植版本。NHibernate 支持多种数据库,提供了丰富的映射配置选项,并且具有灵活的查询功能。 |
3 | C# | Dapper | Dapper 是一个轻量级的 ORM 框架,它由 StackExchange 团队开发。与其他 ORM 框架相比,Dapper 更加注重性能,它提供了一种直接执行 SQL 查询并将结果映射为对象的简单方式。 |
4 | C# | LLBLGen Pro | LLBLGen Pro 是一个商业级的 ORM 框架,它提供了广泛的功能和工具,用于配置和生成数据访问层代码。它支持多种数据库,以及高级的数据模型定制和查询功能。 |
5 | C# | SQLSugar | SQLSugar是一个基于.Net平台的ORM(对象关系映射)工具,用于简化数据库操作 |
6 | Java | Hibernate | 是一个开源的 ORM 框架,它以灵活的映射和数据库访问能力而闻名。它支持关系数据库和面向对象的数据模型之间的映射,并提供了一个丰富的查询语言(HQL)来检索数据。 |
7 | Java | MyBatis | 是一款简单易用的持久层框架,它通过 XML 或注解的方式将 Java 对象映射到数据库表。相比于 Hibernate,MyBatis 更加灵活,可以直接编写 SQL 语句,提供了更细粒度的控制权。 |
8 | Java | JPA(Java Persistence API) | JavaEE 的持久化标准,它定义了一套 ORM 规范,为开发人员提供了一种简化数据库操作的方式。JPA 的实现包括 Hibernate、EclipseLink 等。 |
9 | Java | Spring Data JPA | 是 Spring Framework 提供的一个用于简化 JPA 开发的模块。它通过使用 Repository 接口,大大减少了编写数据访问层的代码量,并提供了一些便利的查询方法。 |
四、C#底层技术
在 C# ORM 框架的底层技术中,通常涉及以下几个方面:
4.1、ADO.Net
ORM 框架通常会使用 ADO.Net 提供的底层数据库连接和执行功能。ADO.Net 是微软官方提供的用于访问和操作关系型数据库的框架,它提供了一组类和接口,用于连接数据库、执行 SQL 查询和更新操作。
4.2、数据库提供程序
ORM 框架需要通过数据库提供程序与具体的数据库进行通信。数据库提供程序是用于与不同数据库交互的层,它封装了底层数据库引擎的细节,使得框架可以通过统一的方式与不同类型的数据库进行交互。
4.3、映射引擎
ORM 框架需要进行对象与数据库表之间的映射,将数据库中的数据转换为对象,并将对象的修改保存回数据库。映射引擎负责处理对象与数据库表之间的映射关系,通常使用元数据和配置来定义表和对象之间的对应关系。
4.4、查询语言
ORM 框架通常会提供一种更适合面向对象编程的查询语言,用于进行复杂的查询操作。这些查询语言可以在编译时进行类型检查,提供更丰富和灵活的查询能力,例如 LINQ (Language Integrated Query)。
综上所述,C# ORM 框架的底层技术涉及 ADO.Net、数据库提供程序、映射引擎和查询语言等方面,通过这些技术来实现方便、高效地访问和操作数据库。不同的 ORM 框架可能在处理方式和实现细节上有所差异,但它们都在这些基本技术的基础上进行开发和扩展。
五、Java底层技术
Java ORM 框架的底层技术通常涉及以下几个方面:
5.1、JDBC(Java Database Connectivity)
JDBC 是 Java 提供的一套数据库访问标准,它定义了一组 API 和协议,用于与关系型数据库进行通信。ORM 框架通过 JDBC 提供的 API 将 Java 对象与数据库表之间进行映射和交互。
5.2、数据库连接池
ORM 框架通常会使用数据库连接池来管理数据库连接。数据库连接池是一种重用数据库连接的技术,通过减少频繁创建和关闭数据库连接的开销,提高了应用程序的性能和资源利用率。
5.3、反射(Reflection)
ORM 框架通常会使用反射机制来动态地操作 Java 对象的属性和方法。反射可以在运行时获取对象的类信息,并通过类的属性和方法进行操作,使得 ORM 框架能够根据定义的映射关系,将对象持久化到数据库或从数据库中读取对象。
5.4、缓存(Cache)
为了提高性能,ORM 框架通常会使用缓存技术来存储频繁访问的对象或查询结果。ORM 框架可以借助缓存来减少与数据库的交互次数,提高数据读取的速度。
5.5、事务管理
ORM 框架需要支持数据库事务的管理。事务是一种用来保证数据库操作的一致性和隔离性的机制,ORM 框架通常会提供事务管理的功能,例如通过注解或声明式方式来管理事务的开始、提交或回滚。
综上所述,Java ORM 框架底层技术主要包括 JDBC 作为与数据库交互的接口,数据库连接池、反射、缓存和事务管理等技术来提供高效的对象-关系映射和数据库操作功能。
相关文章:

【ORM】浅聊C#和Java的ORM底层框架
给自己一个目标,然后坚持一段时间,总会有收获和感悟! 国庆假期马上结束,闲暇时间,突然对Ado.Net这个词的由来感兴趣,然后就一顿复习了一遍,顺便也了解了下java关于ORM框架的底层是什么ÿ…...

windows redis 自启动 Redis服务无法启动报错1067问题
如果你的系统服务里面已经有redis服务并且无法启动,则使用下面的命令卸载此服务 ! 1、停止Redis服务: redis-server --service-uninstall 2、删除系统服务 sc delete redis 进入到你的Redis安装目录,我的在以下目录,谨记此时不…...

Ubuntu Server CLI专业提示
基础 网络 获取所有接口的IP地址 networkctl status 显示主机的所有IP地址 hostname -I 启用/禁用接口 ip link set <interface> up ip link set <interface> down 显示路线 ip route 将使用哪条路线到达主机 ip route get <IP> 安全 显示已登录的用户 w…...

Centos7升级OpenSSH9.1
最近遇到了服务器漏洞,需要对服务器的OpenSSH版本进行升级,查阅了相关资料,总结出了一套比较简单的方案。中间遇到的个别问题也进行了记录,供大家参考。 下载准备 从https://ftp.jaist.ac.jp/pub/OpenBSD/OpenSSH/portable/opens…...

linux——信号
目录 一.信号的保存 二.信号集操作 1.信号集 2.信号集操作函数 3.sigprocmask 4.sigpending 三. 信号的捕捉 1.内核态和用户态 2. sigaction 四.可重入函数 五.SIGCHLD信号 一.信号的保存 实际执行信号的处理动作称为信号递达(Delivery)。信号从产生到递达之间的状…...

存档&改造【03】Apex-Fancy-Tree-Select花式树的导入及学习
Apex-Fancy-Tree-Select git学习网页 GitHub - RonnyWeiss/Apex-Fancy-Tree-Select: Fancy Tree Plug-in for Oracle APEX 如何从其他应用程序导出已有插件到新应用程序中 1.从其他应用程序导出插件 其他应用程序-【共享组件】-【插件】-【任务 导出插件】-选择想要导出的…...

【单片机】14-I2C通信之EEPROM
1.EEPROM概念 1.EEPROM 1.1 一些概念 (1)一些概念:ROM【只读存储器---硬盘】,RAM【随机访问存储器--内存】,PROM【可编程的ROM】,EPROM【可擦除ROM】,EEPROM【电可擦除ROM】 1.2 为什么需要EE…...

Mini-dashboard 和meilisearch配合使用
下载的meilisearch一般是development模式,内置客户端,修改客户端后需要重要全部编译,花时间太长了。前后端分离才是正道,客户端修改不用重新编译后端。 方法如下: 1、修改配置文件/etc/meilisearch.toml,…...
leetcode 886. 可能的二分法
给定一组 n 人(编号为 1, 2, …, n), 我们想把每个人分进任意大小的两组。每个人都可能不喜欢其他人,那么他们不应该属于同一组。 给定整数 n 和数组 dislikes ,其中 dislikes[i] [ai, bi] ,表示不允许将…...

Elasticsearch:使用 ELSER 文本扩展进行语义搜索
在今天的文章里,我来详细地介绍如何使用 ELSER 进行文本扩展驱动的语义搜索。 安装 Elasticsearch 及 Kibana 如果你还没有安装好自己的 Elasticsearch 及 Kibana,请参考如下的链接来进行安装: 如何在 Linux,MacOS 及 Windows 上…...
OpenRadar DOA函数 Bartlett/CBF和Capon使用
Bartlett / CBF原理看这里 Capon原理看这里 这里只讲怎么调用openradar提供的aoa_bartlett和aoa_capon函数: 一些吐槽:虽然看起来openradar的作者代码水平很高,但里面有很多匪夷所思的写法,比如他demo里的解析文件格式就很迷啊等…...

二叉树--翻转二叉树
文章前言:如果有小白同学还是对于二叉树不太清楚,作者推荐:二叉树的初步认识_加瓦不加班的博客-CSDN博客 给你一棵二叉树的根节点 root ,翻转这棵二叉树,并返回其根节点。 如果思路不清楚,请看动态页面&am…...

强化学习环境 - robogym - 学习 - 3
强化学习环境 - robogym - 学习 - 3 文章目录 强化学习环境 - robogym - 学习 - 3项目地址为什么选择 robogymObservation - 观测信息Action - 动作信息Initialization - 初始状态设置 项目地址 https://github.com/openai/robogym 为什么选择 robogym 自己的项目需要做一些机…...

CUDA+cuDNN+TensorRT 配置避坑指南
深度学习模型加速部署的环境配置,需要在本地安装NVIDIA的一些工具链和软件包,这是一个些许繁琐的过程,而且一步错,步步错。笔者将会根据自己的经验来提供建议,减少踩坑几率。当然可以完全按照官方教程操作,…...

关于PointHeadBox类的理解
forward函数 def forward(self, batch_dict):"""Args:batch_dict:batch_size:point_features: (N1 N2 N3 ..., C) or (B, N, C)point_features_before_fusion: (N1 N2 N3 ..., C)point_coords: (N1 N2 N3 ..., 4) [bs_idx, x, y, z]point_labels (opti…...
javascript二维数组(10)ajax的使用
在JQuery中,使用AJAX的方法主要有以下几种: $.ajax():这是JQuery中最通用的AJAX请求方法。它需要一个包含各种参数的对象,其中包括请求的URL、请求方式、数据类型、请求参数等。请求成功后执行的回调函数也是通过参数来定义的。 …...

CMMI5认证哪些企业可以申请
CMMI5认证哪些企业可以申请 什么是CMMI5认证 CMMI(Capability Maturity Model Integration)是一种用于评估组织的软件工程能力的国际标准。CMMI模型包括5个等级,其中CMMI5是最高等级,代表组织具有达到持续优化和创新的能力。获得…...

【iptables 实战】9 docker网络原理分析
在开始本章阅读之前,需要提前了解以下的知识 阅读本节需要一些docker的基础知识,最好是在linux上安装好docker环境。提前掌握iptables的基础知识,前文参考【iptables 实战】 一、docker网络模型 docker网络模型如下图所示 说明࿱…...

【多级缓存】
文章目录 1. JVM进程缓存2. Lua语法3. 实现多级缓存3.1 反向代理流程3.2 OpenResty快速入门 4. 查询Tomcat4.1 发送http请求的API4.2 封装http工具4.3 基于ID负载均衡4.4 流程小结 5. Redis缓存查询5.1 实现Redis查询 6. Nginx本地缓存6.1 本地缓存API6.2 实现本地缓存查询 7. …...

第五课 树与图
文章目录 第五课 树与图lc94.二叉树的中序遍历--简单题目描述代码展示 lc589.N叉树的层序遍历--中等题目描述代码展示 lc297.二叉树的序列化和反序列化--困难题目描述代码展示 lc105.从前序与中序遍历序列构造二叉树--中等题目描述代码展示 lc106.从中序与后序遍历序列构造二叉…...
FFmpeg 低延迟同屏方案
引言 在实时互动需求激增的当下,无论是在线教育中的师生同屏演示、远程办公的屏幕共享协作,还是游戏直播的画面实时传输,低延迟同屏已成为保障用户体验的核心指标。FFmpeg 作为一款功能强大的多媒体框架,凭借其灵活的编解码、数据…...
QMC5883L的驱动
简介 本篇文章的代码已经上传到了github上面,开源代码 作为一个电子罗盘模块,我们可以通过I2C从中获取偏航角yaw,相对于六轴陀螺仪的yaw,qmc5883l几乎不会零飘并且成本较低。 参考资料 QMC5883L磁场传感器驱动 QMC5883L磁力计…...
将对透视变换后的图像使用Otsu进行阈值化,来分离黑色和白色像素。这句话中的Otsu是什么意思?
Otsu 是一种自动阈值化方法,用于将图像分割为前景和背景。它通过最小化图像的类内方差或等价地最大化类间方差来选择最佳阈值。这种方法特别适用于图像的二值化处理,能够自动确定一个阈值,将图像中的像素分为黑色和白色两类。 Otsu 方法的原…...
Qwen3-Embedding-0.6B深度解析:多语言语义检索的轻量级利器
第一章 引言:语义表示的新时代挑战与Qwen3的破局之路 1.1 文本嵌入的核心价值与技术演进 在人工智能领域,文本嵌入技术如同连接自然语言与机器理解的“神经突触”——它将人类语言转化为计算机可计算的语义向量,支撑着搜索引擎、推荐系统、…...

srs linux
下载编译运行 git clone https:///ossrs/srs.git ./configure --h265on make 编译完成后即可启动SRS # 启动 ./objs/srs -c conf/srs.conf # 查看日志 tail -n 30 -f ./objs/srs.log 开放端口 默认RTMP接收推流端口是1935,SRS管理页面端口是8080,可…...
Python如何给视频添加音频和字幕
在Python中,给视频添加音频和字幕可以使用电影文件处理库MoviePy和字幕处理库Subtitles。下面将详细介绍如何使用这些库来实现视频的音频和字幕添加,包括必要的代码示例和详细解释。 环境准备 在开始之前,需要安装以下Python库:…...

使用 Streamlit 构建支持主流大模型与 Ollama 的轻量级统一平台
🎯 使用 Streamlit 构建支持主流大模型与 Ollama 的轻量级统一平台 📌 项目背景 随着大语言模型(LLM)的广泛应用,开发者常面临多个挑战: 各大模型(OpenAI、Claude、Gemini、Ollama)接口风格不统一;缺乏一个统一平台进行模型调用与测试;本地模型 Ollama 的集成与前…...
Web 架构之 CDN 加速原理与落地实践
文章目录 一、思维导图二、正文内容(一)CDN 基础概念1. 定义2. 组成部分 (二)CDN 加速原理1. 请求路由2. 内容缓存3. 内容更新 (三)CDN 落地实践1. 选择 CDN 服务商2. 配置 CDN3. 集成到 Web 架构 …...
Java线上CPU飙高问题排查全指南
一、引言 在Java应用的线上运行环境中,CPU飙高是一个常见且棘手的性能问题。当系统出现CPU飙高时,通常会导致应用响应缓慢,甚至服务不可用,严重影响用户体验和业务运行。因此,掌握一套科学有效的CPU飙高问题排查方法&…...
管理学院权限管理系统开发总结
文章目录 🎓 管理学院权限管理系统开发总结 - 现代化Web应用实践之路📝 项目概述🏗️ 技术架构设计后端技术栈前端技术栈 💡 核心功能特性1. 用户管理模块2. 权限管理系统3. 统计报表功能4. 用户体验优化 🗄️ 数据库设…...