【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.从中序与后序遍历序列构造二叉…...

使用docker在3台服务器上搭建基于redis 6.x的一主两从三台均是哨兵模式
一、环境及版本说明 如果服务器已经安装了docker,则忽略此步骤,如果没有安装,则可以按照一下方式安装: 1. 在线安装(有互联网环境): 请看我这篇文章 传送阵>> 点我查看 2. 离线安装(内网环境):请看我这篇文章 传送阵>> 点我查看 说明:假设每台服务器已…...
Python|GIF 解析与构建(5):手搓截屏和帧率控制
目录 Python|GIF 解析与构建(5):手搓截屏和帧率控制 一、引言 二、技术实现:手搓截屏模块 2.1 核心原理 2.2 代码解析:ScreenshotData类 2.2.1 截图函数:capture_screen 三、技术实现&…...

地震勘探——干扰波识别、井中地震时距曲线特点
目录 干扰波识别反射波地震勘探的干扰波 井中地震时距曲线特点 干扰波识别 有效波:可以用来解决所提出的地质任务的波;干扰波:所有妨碍辨认、追踪有效波的其他波。 地震勘探中,有效波和干扰波是相对的。例如,在反射波…...
反向工程与模型迁移:打造未来商品详情API的可持续创新体系
在电商行业蓬勃发展的当下,商品详情API作为连接电商平台与开发者、商家及用户的关键纽带,其重要性日益凸显。传统商品详情API主要聚焦于商品基本信息(如名称、价格、库存等)的获取与展示,已难以满足市场对个性化、智能…...

3.3.1_1 检错编码(奇偶校验码)
从这节课开始,我们会探讨数据链路层的差错控制功能,差错控制功能的主要目标是要发现并且解决一个帧内部的位错误,我们需要使用特殊的编码技术去发现帧内部的位错误,当我们发现位错误之后,通常来说有两种解决方案。第一…...

LeetCode - 394. 字符串解码
题目 394. 字符串解码 - 力扣(LeetCode) 思路 使用两个栈:一个存储重复次数,一个存储字符串 遍历输入字符串: 数字处理:遇到数字时,累积计算重复次数左括号处理:保存当前状态&a…...

如何将联系人从 iPhone 转移到 Android
从 iPhone 换到 Android 手机时,你可能需要保留重要的数据,例如通讯录。好在,将通讯录从 iPhone 转移到 Android 手机非常简单,你可以从本文中学习 6 种可靠的方法,确保随时保持连接,不错过任何信息。 第 1…...
服务器--宝塔命令
一、宝塔面板安装命令 ⚠️ 必须使用 root 用户 或 sudo 权限执行! sudo su - 1. CentOS 系统: yum install -y wget && wget -O install.sh http://download.bt.cn/install/install_6.0.sh && sh install.sh2. Ubuntu / Debian 系统…...
Caliper 负载(Workload)详细解析
Caliper 负载(Workload)详细解析 负载(Workload)是 Caliper 性能测试的核心部分,它定义了测试期间要执行的具体合约调用行为和交易模式。下面我将全面深入地讲解负载的各个方面。 一、负载模块基本结构 一个典型的负载模块(如 workload.js)包含以下基本结构: use strict;/…...
苹果AI眼镜:从“工具”到“社交姿态”的范式革命——重新定义AI交互入口的未来机会
在2025年的AI硬件浪潮中,苹果AI眼镜(Apple Glasses)正在引发一场关于“人机交互形态”的深度思考。它并非简单地替代AirPods或Apple Watch,而是开辟了一个全新的、日常可接受的AI入口。其核心价值不在于功能的堆叠,而在于如何通过形态设计打破社交壁垒,成为用户“全天佩戴…...