当前位置: 首页 > news >正文

【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框架备注
1C#Entity Framework(EF)EF 是微软官方推出的 ORM 框架,它支持多种数据库提供程序,并提供了强大的对象关系映射功能和 LINQ 查询语言的支持。
2C#NHibernateNHibernate 是一个成熟的开源 ORM 框架,它是 Hibernate 在 .NET 平台上的移植版本。NHibernate 支持多种数据库,提供了丰富的映射配置选项,并且具有灵活的查询功能。
3C#DapperDapper 是一个轻量级的 ORM 框架,它由 StackExchange 团队开发。与其他 ORM 框架相比,Dapper 更加注重性能,它提供了一种直接执行 SQL 查询并将结果映射为对象的简单方式。
4C#LLBLGen ProLLBLGen Pro 是一个商业级的 ORM 框架,它提供了广泛的功能和工具,用于配置和生成数据访问层代码。它支持多种数据库,以及高级的数据模型定制和查询功能。
5C#SQLSugarSQLSugar是一个基于.Net平台的ORM(对象关系映射)工具,用于简化数据库操作
6JavaHibernate是一个开源的 ORM 框架,它以灵活的映射和数据库访问能力而闻名。它支持关系数据库和面向对象的数据模型之间的映射,并提供了一个丰富的查询语言(HQL)来检索数据。
7JavaMyBatis是一款简单易用的持久层框架,它通过 XML 或注解的方式将 Java 对象映射到数据库表。相比于 Hibernate,MyBatis 更加灵活,可以直接编写 SQL 语句,提供了更细粒度的控制权。
8JavaJPA(Java Persistence API)JavaEE 的持久化标准,它定义了一套 ORM 规范,为开发人员提供了一种简化数据库操作的方式。JPA 的实现包括 Hibernate、EclipseLink 等。
9JavaSpring 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框架的底层是什么&#xff…...

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

最近遇到了服务器漏洞&#xff0c;需要对服务器的OpenSSH版本进行升级&#xff0c;查阅了相关资料&#xff0c;总结出了一套比较简单的方案。中间遇到的个别问题也进行了记录&#xff0c;供大家参考。 下载准备 从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 一些概念 &#xff08;1&#xff09;一些概念&#xff1a;ROM【只读存储器---硬盘】&#xff0c;RAM【随机访问存储器--内存】&#xff0c;PROM【可编程的ROM】&#xff0c;EPROM【可擦除ROM】&#xff0c;EEPROM【电可擦除ROM】 1.2 为什么需要EE…...

Mini-dashboard 和meilisearch配合使用

下载的meilisearch一般是development模式&#xff0c;内置客户端&#xff0c;修改客户端后需要重要全部编译&#xff0c;花时间太长了。前后端分离才是正道&#xff0c;客户端修改不用重新编译后端。 方法如下&#xff1a; 1、修改配置文件/etc/meilisearch.toml&#xff0c;…...

leetcode 886. 可能的二分法

给定一组 n 人&#xff08;编号为 1, 2, …, n&#xff09;&#xff0c; 我们想把每个人分进任意大小的两组。每个人都可能不喜欢其他人&#xff0c;那么他们不应该属于同一组。 给定整数 n 和数组 dislikes &#xff0c;其中 dislikes[i] [ai, bi] &#xff0c;表示不允许将…...

Elasticsearch:使用 ELSER 文本扩展进行语义搜索

在今天的文章里&#xff0c;我来详细地介绍如何使用 ELSER 进行文本扩展驱动的语义搜索。 安装 Elasticsearch 及 Kibana 如果你还没有安装好自己的 Elasticsearch 及 Kibana&#xff0c;请参考如下的链接来进行安装&#xff1a; 如何在 Linux&#xff0c;MacOS 及 Windows 上…...

OpenRadar DOA函数 Bartlett/CBF和Capon使用

Bartlett / CBF原理看这里 Capon原理看这里 这里只讲怎么调用openradar提供的aoa_bartlett和aoa_capon函数&#xff1a; 一些吐槽&#xff1a;虽然看起来openradar的作者代码水平很高&#xff0c;但里面有很多匪夷所思的写法&#xff0c;比如他demo里的解析文件格式就很迷啊等…...

二叉树--翻转二叉树

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

强化学习环境 - robogym - 学习 - 3

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

CUDA+cuDNN+TensorRT 配置避坑指南

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

关于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中&#xff0c;使用AJAX的方法主要有以下几种&#xff1a; $.ajax()&#xff1a;这是JQuery中最通用的AJAX请求方法。它需要一个包含各种参数的对象&#xff0c;其中包括请求的URL、请求方式、数据类型、请求参数等。请求成功后执行的回调函数也是通过参数来定义的。 …...

CMMI5认证哪些企业可以申请

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

【iptables 实战】9 docker网络原理分析

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

【多级缓存】

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

基于算法竞赛的c++编程(28)结构体的进阶应用

结构体的嵌套与复杂数据组织 在C中&#xff0c;结构体可以嵌套使用&#xff0c;形成更复杂的数据结构。例如&#xff0c;可以通过嵌套结构体描述多层级数据关系&#xff1a; struct Address {string city;string street;int zipCode; };struct Employee {string name;int id;…...

mongodb源码分析session执行handleRequest命令find过程

mongo/transport/service_state_machine.cpp已经分析startSession创建ASIOSession过程&#xff0c;并且验证connection是否超过限制ASIOSession和connection是循环接受客户端命令&#xff0c;把数据流转换成Message&#xff0c;状态转变流程是&#xff1a;State::Created 》 St…...

Go 语言接口详解

Go 语言接口详解 核心概念 接口定义 在 Go 语言中&#xff0c;接口是一种抽象类型&#xff0c;它定义了一组方法的集合&#xff1a; // 定义接口 type Shape interface {Area() float64Perimeter() float64 } 接口实现 Go 接口的实现是隐式的&#xff1a; // 矩形结构体…...

【第二十一章 SDIO接口(SDIO)】

第二十一章 SDIO接口 目录 第二十一章 SDIO接口(SDIO) 1 SDIO 主要功能 2 SDIO 总线拓扑 3 SDIO 功能描述 3.1 SDIO 适配器 3.2 SDIOAHB 接口 4 卡功能描述 4.1 卡识别模式 4.2 卡复位 4.3 操作电压范围确认 4.4 卡识别过程 4.5 写数据块 4.6 读数据块 4.7 数据流…...

连锁超市冷库节能解决方案:如何实现超市降本增效

在连锁超市冷库运营中&#xff0c;高能耗、设备损耗快、人工管理低效等问题长期困扰企业。御控冷库节能解决方案通过智能控制化霜、按需化霜、实时监控、故障诊断、自动预警、远程控制开关六大核心技术&#xff0c;实现年省电费15%-60%&#xff0c;且不改动原有装备、安装快捷、…...

全球首个30米分辨率湿地数据集(2000—2022)

数据简介 今天我们分享的数据是全球30米分辨率湿地数据集&#xff0c;包含8种湿地亚类&#xff0c;该数据以0.5X0.5的瓦片存储&#xff0c;我们整理了所有属于中国的瓦片名称与其对应省份&#xff0c;方便大家研究使用。 该数据集作为全球首个30米分辨率、覆盖2000–2022年时间…...

拉力测试cuda pytorch 把 4070显卡拉满

import torch import timedef stress_test_gpu(matrix_size16384, duration300):"""对GPU进行压力测试&#xff0c;通过持续的矩阵乘法来最大化GPU利用率参数:matrix_size: 矩阵维度大小&#xff0c;增大可提高计算复杂度duration: 测试持续时间&#xff08;秒&…...

什么?连接服务器也能可视化显示界面?:基于X11 Forwarding + CentOS + MobaXterm实战指南

文章目录 什么是X11?环境准备实战步骤1️⃣ 服务器端配置(CentOS)2️⃣ 客户端配置(MobaXterm)3️⃣ 验证X11 Forwarding4️⃣ 运行自定义GUI程序(Python示例)5️⃣ 成功效果![在这里插入图片描述](https://i-blog.csdnimg.cn/direct/55aefaea8a9f477e86d065227851fe3d.pn…...

Golang——6、指针和结构体

指针和结构体 1、指针1.1、指针地址和指针类型1.2、指针取值1.3、new和make 2、结构体2.1、type关键字的使用2.2、结构体的定义和初始化2.3、结构体方法和接收者2.4、给任意类型添加方法2.5、结构体的匿名字段2.6、嵌套结构体2.7、嵌套匿名结构体2.8、结构体的继承 3、结构体与…...

从物理机到云原生:全面解析计算虚拟化技术的演进与应用

前言&#xff1a;我的虚拟化技术探索之旅 我最早接触"虚拟机"的概念是从Java开始的——JVM&#xff08;Java Virtual Machine&#xff09;让"一次编写&#xff0c;到处运行"成为可能。这个软件层面的虚拟化让我着迷&#xff0c;但直到后来接触VMware和Doc…...