【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.从中序与后序遍历序列构造二叉…...
地震勘探——干扰波识别、井中地震时距曲线特点
目录 干扰波识别反射波地震勘探的干扰波 井中地震时距曲线特点 干扰波识别 有效波:可以用来解决所提出的地质任务的波;干扰波:所有妨碍辨认、追踪有效波的其他波。 地震勘探中,有效波和干扰波是相对的。例如,在反射波…...
css实现圆环展示百分比,根据值动态展示所占比例
代码如下 <view class""><view class"circle-chart"><view v-if"!!num" class"pie-item" :style"{background: conic-gradient(var(--one-color) 0%,#E9E6F1 ${num}%),}"></view><view v-else …...
在鸿蒙HarmonyOS 5中实现抖音风格的点赞功能
下面我将详细介绍如何使用HarmonyOS SDK在HarmonyOS 5中实现类似抖音的点赞功能,包括动画效果、数据同步和交互优化。 1. 基础点赞功能实现 1.1 创建数据模型 // VideoModel.ets export class VideoModel {id: string "";title: string ""…...
以下是对华为 HarmonyOS NETX 5属性动画(ArkTS)文档的结构化整理,通过层级标题、表格和代码块提升可读性:
一、属性动画概述NETX 作用:实现组件通用属性的渐变过渡效果,提升用户体验。支持属性:width、height、backgroundColor、opacity、scale、rotate、translate等。注意事项: 布局类属性(如宽高)变化时&#…...
无法与IP建立连接,未能下载VSCode服务器
如题,在远程连接服务器的时候突然遇到了这个提示。 查阅了一圈,发现是VSCode版本自动更新惹的祸!!! 在VSCode的帮助->关于这里发现前几天VSCode自动更新了,我的版本号变成了1.100.3 才导致了远程连接出…...
基于服务器使用 apt 安装、配置 Nginx
🧾 一、查看可安装的 Nginx 版本 首先,你可以运行以下命令查看可用版本: apt-cache madison nginx-core输出示例: nginx-core | 1.18.0-6ubuntu14.6 | http://archive.ubuntu.com/ubuntu focal-updates/main amd64 Packages ng…...
Go 语言接口详解
Go 语言接口详解 核心概念 接口定义 在 Go 语言中,接口是一种抽象类型,它定义了一组方法的集合: // 定义接口 type Shape interface {Area() float64Perimeter() float64 } 接口实现 Go 接口的实现是隐式的: // 矩形结构体…...
如何在最短时间内提升打ctf(web)的水平?
刚刚刷完2遍 bugku 的 web 题,前来答题。 每个人对刷题理解是不同,有的人是看了writeup就等于刷了,有的人是收藏了writeup就等于刷了,有的人是跟着writeup做了一遍就等于刷了,还有的人是独立思考做了一遍就等于刷了。…...
AspectJ 在 Android 中的完整使用指南
一、环境配置(Gradle 7.0 适配) 1. 项目级 build.gradle // 注意:沪江插件已停更,推荐官方兼容方案 buildscript {dependencies {classpath org.aspectj:aspectjtools:1.9.9.1 // AspectJ 工具} } 2. 模块级 build.gradle plu…...
DeepSeek 技术赋能无人农场协同作业:用 AI 重构农田管理 “神经网”
目录 一、引言二、DeepSeek 技术大揭秘2.1 核心架构解析2.2 关键技术剖析 三、智能农业无人农场协同作业现状3.1 发展现状概述3.2 协同作业模式介绍 四、DeepSeek 的 “农场奇妙游”4.1 数据处理与分析4.2 作物生长监测与预测4.3 病虫害防治4.4 农机协同作业调度 五、实际案例大…...
