当前位置:首页 » 数据仓库 » orm能不能直接访问底层数据库
扩展阅读
webinf下怎么引入js 2023-08-31 21:54:13
堡垒机怎么打开web 2023-08-31 21:54:11

orm能不能直接访问底层数据库

发布时间: 2022-10-16 16:21:38

❶ Hibernate框架ORM的实现原理

东方标准国际软件专业讲师,曾经负责过的重大的大型项目包括:全军武器装备

质量管理系统、全军办公自动化系统、日本NTT电信管理系统等。主要着作包括

《ASP.NET开发答疑200问》《ASP.NET开发实例导航》等。毕业于北京大学计算

机专业。

1. 什么是ORM

ORM的全称是Object Relational Mapping,即对象关系映射。它的实现思想就是

将关系数据库中表的数据映射成为对象,以对象的形式展现,这样开发人员就可

以把对数据库的操作转化为对这些对象的操作。因此它的目的是为了方便开发人

员以面向对象的思想来实现对数据库的操作。

2.什么是Hibernate

对于Hibernate的称呼有很多,比如工具、技术、框架以及解决方案等,这些都

可以,重要的是大家要知道它的作用。在这里我习惯性称它为框架,它是一种能

实现ORM的框架。能实现ORM这个功能的框架有很多,Hibernate可以说是这些框

架中最流行、最受开发者关注的,甚至连JBoss公司也把它吸收进来,利用它在

自己的项目中实现ORM功能。

3.ORM的实现原理

现在在Java领域大家对Hibernate的讨论很多,比如它的优缺点、如何应用、错

误如何解决以及把它和Struts/Spring等框架相结合作为整个系统的解决方案。

在这里我想和大家探讨一些更深层次的话题,那就是Hibernate是如何实现ORM的

功能?如果让我们自己开发一款实现ORM功能的框架需要怎么做?其实这些问题

就是围绕着一个词,那就是“映射”,如果我们知道如何实现这种映射那么我们

也能够开发出自己的一款ORM框架。会使用 Hibernate的开发人员都知道,在使

用它实现ORM功能的时候,主要的文件有:映射类(*.java)、映射文件

(*.hbm.xml)以及数据库配置文件(*.properties或*.cfg.xml),它们各自的

作用如下。

⑴映射类:它的作用是描述数据库表的结构,表中的字段在类中被描述成属性,

将来就可以实现把表中的记录映射成为该类的对象。

⑵映射文件:它的作用是指定数据库表和映射类之间的关系,包括映射类和数据

库表的对应关系、表字段和类属性类型的对应关系以及表字段和类属性名称的对

应关系等。

⑶数据库配置文件:它的作用是指定与数据库连接时需要的连接信息,比如连接

哪中数据库、登录用户名、登录密码以及连接字符串等。

在这三种主要的文件中,映射类为普通Java源文件、映射文件为XML格式、数据

库配置文件为Properties格式或者是XML格式。想理解“映射” 首先我们需要知

道如何解析这三种文件,即解析XML格式文件、解析Properties格式文件和解析

Java类文件。下面我们来分别探讨一下如何实现这些文件的解析。

⑴如何解析XML文件

前面我们说过映射文件是XML格式,数据库配置文件也可以是XML格式,因此如果

能解析XML文件我们就可以获取这两个文件的信息。XML文件格式我简单做下介绍

,比如tom这句就是一个XML格式的描述,name代表节点,节点必须有开始标记和

结束标记,在开始标记中我们可以添加一些属性的声明比如sex。解析XML的技术

可以分为两类那就是SAX和DOM,这两种方式的差别和优缺点大家可以上网查阅或

者我们会在以后的文章中提出,请大家关注。实现解析XML文件的功能很方便,

我们可以通过下载第三方的一些工具包如xml-apis.jar和 xercesImpl.jar等,

也可以使用JDK自带的工具类DocumentBuilderFactory、DocumentBuilder、

Document、Element等等,大家可以通过API文挡查阅这些类的说明。通过这些类

我们可以把XML文件的信息读入内存并通过类中的某些方法获取指定节点的名字

、值、属性名、属性值这些信息。

⑵解析Properties文件

数据库配置文件可以是XML格式也可以是Properties格式,Properties文件一般

采用“属性名=属性值”的形式描述信息。如果配置文件采用Properties文件描

述,我们就需要想办法解析这种类型的文件了。想解析Properties文件大家就需

要熟悉Properties这个类了,这个类有一些常用方法比如,load()加载指定文件

并读取文件中的属性信息,PropertyNames()返回所有属性名,getProperty ()

返回指定属性名的属性值。通过解析Properties文件我们可以得到连接数据库必

要的信息,然后通过底层JDBC技术与数据库建立连接。

⑶解析Java类文件

通过解析映射文件和数据库配置文件我们可以建立数据库的连接,可以得到映射

类的名字、属性名、数据库表名、字段名以及类型等信息。要把数据库中表的数

据映射成为对象,首先需要把表中的记录取出,然后将每个字段值给映射类对象

的每个属性,这个赋值过程要调用对象中的set方法。我们现在通过映射文件只

知道类名和属性名,如何根据类名和属性名调用相应的set和get方法,是一个关

键问题。在Java中有一种机制叫反射机制,使用这种机制我们可以得到类的信息

,包括类只用的修饰符、方法、属性、继承的父类以及实现接口等信息。反射机

制相关的类有Class、Field、Method以及 Constructor等。通过Class的

getFields()、getMethods()和getConstructors()方法得到相应的属性、方法和

构造方法。通过Field类的getName()、getType()和getModifiers()方法得到相

应的属性名、属性类型、属性修饰符信息。通过Method类getReturnType()可以

获取方法的返回类型,invoke()方法可以根据给定的方法名和参数值执行对象中

对应的方法。我们可以首先通过以上方法获取类中的属性名,然后拼写成setXXX

和getXXX方法名,最后根据方法名执行对应的方法,将数据库数据加载到对象中



此外要实现Hibernate机制还会涉及到一个技术点,那就是如何获取数据库的相

关信息。要实现这个功能,就需要大家了解JDBC的 DataBaseMetaData类和

ResultSetMetaData类,通过这两个类的方法我们就可以获取数据库表的字段名

、类型、大小等相关信息。

❷ hibernate 中的ORM是如何与数据库实现存储和查询的

通过映射文件确定实体类与数据库表之间的映射关系,大部分情况下一个实体类对应一张表,实体类属性对应数据库中表的字段;另外,通过配置文件确定与数据库相关的参数,如:数据库具体版本、JDBC驱动、数据库连接URL、用户名、密码等。Hibernate会根据映射文件、配置文件以及用户的操作,将应用层的逻辑行为最终转化成sql语句提交给数据库服务器执行。Hibernate简化了开发过程拼SQL、构建实体对象的过程;同时,Hibernate屏蔽的底层数据库之间SQL的差异,当需要转成异构的数据库时,只要简单的修改下配置文件指定新的数据库类型即可,无需修改具体的SQL。

❸ 什么是orm框架

ORM(ObjectRelationalMapping)框架采用元数据来描述对象一关系映射细节,元数据一般采用XML格式,并且存放在专门的对象一映射文件中。

基本内容
ORM框架采用元数据来描述对象一关系映射细节,元数据一般采用XML格式,并且存放在专门的对象一映射文件中。只要提供了持久化类与表的映射关系,ORM框架在运行时就能参照映射文件的信息,把对象持久化到数据库中。当前ORM框架主要有三种:Hibernate,iBATIS,EclipseLink。

❹ 什么是ORM

ORM是对象关系映射(英语:(Object Relational Mapping,简称ORM,或O/RM,或O/R mapping),是一种程序技术,用于实现面向对象编程语言里不同类型系统的数据之间的转换。从效果上说,它其实是创建了一个可在编程语言里使用的--“虚拟对象数据库”。

(ORM is Object Relational Mapping (ORM, or O/RM, or O/R Mapping), a programming technique used to transform data between different types of systems in an object-oriented programming language. In effect, it creates a "virtual object database" that can be used in a programming language.)

拓展资料

ORM的由来:面向对象是从软件工程基本原则(如耦合、聚合、封装)的基础上发展起来的,而关系数据库则是从数学理论发展而来的,两套理论存在显着的区别。为了解决这个不匹配的现象,对象关系映射技术应运而生。

❺ mybatis算是orm框架吗,可以更换底层数据库吗

mybatis的主要特使是sqlMap,也可以当作orm来使用,不过sql得自己写。至于你说的更换数据库,只要你的SQL写得够通用,把底层的数据源替换掉就可以了。
就算是orm的hibernate的hql语句,如果没有注意各个数据库的不同点,写的不好,有的hql也一样不能通用的

❻ ORM框架是什么

orm
-
即object/relation
mapping
详细说明参见:http://ke..com/view/197951.htm
大概地说,这类框架的是为了将类对象和关系建立映射,在应用程序和数据库的io之间建立一个中间层,在程序中只需要直接操作对象(数据库中对象的增删改查),而不用去关心数据库中表的列啊,关系啊什么的
举个例子:
以前一直自己一个人在家吃饭,需要自己去买米买菜,然后自己再做,做完了还得收拾,觉得好麻烦,但是也得做,没办法啊,苦逼的单身-
-
这也就相当于传统的操作关系(未使用orm);
而终于有一天,发现去饭馆吃饭很方便,不用操心买菜啊什么的,也不用操心吃完还得去收拾一大堆什么的,点好菜,吃好付钱走人就行了
-
什么做饭烧菜的事儿都有别人去做好,具体人家怎么做,就不用管了
-
-
这饭馆就相当于是一个orm的映射框架,为你处理那些烦琐的无聊的事,只把最重要的环节--吃饭--让你来做
而点菜就相当于你在做orm映射的配置,你告诉饭馆你要吃点啥,饭馆就根据你的需要去配菜准备,做好了就给你送上来!

❼ mybatis算是orm框架吗,可以更换底层数据库吗

1、定义
mybatis是一个支持普通sql查询,存储过程和高级映射的优秀持久层框架。
2、使用原因
mybatis消除了几乎所有的jdbc代码和参数的手工设置以及对结果集的检索封装。mybatis可以使用简单的xml或注解用于配置和原始映射

❽ ORM  和 JDBC 有何不一样

ORM:是对象关系模型,如hibernate,让你以面向对象的方式去编程。封装了JDBC.
JDBC:是从底层访问数据库服务器。一般银行,金融行业为了安全起见,直接用JDBC访问。

❾ 有谁能通俗点的给我讲解下ORM是什么吗网上查的一大把专业理论名词。看了一头雾水。有谁能通俗点将吗

我用c#的说法给你解释一下:

在ORM出现之前,.NET语言对数据库操作都是使用ADO.NET

就是手动打开关闭SqlConnection ,然后手动拼接SQL语句,如:

select*fromstudent;

直接使用SQL语句虽然能带来极大的性能体验,但是也会有很多问题:

  1. SQL语句的错误不好检查(因为SQL语句全是字符串,无法做语法检查)

  2. 接收到的数据全是弱类型,如果你想要使用基本都要做类型转换


ORM就是用本地的model代替数据库里面的各种表,你直接通过操作dbContext就可以获得数据库中的数据,然后它还使用一些技术把ADO.NET中一些麻烦的事给解决了

在EF中使用LINQ来编写数据库操作语法,ORM会自己将LINQ语句翻译为对应的SQL语句,然后将返回的数据自动做类型转换生成对应的model,就像这样:

varstudentList=dbContext.Student.ToList();

使用ORM后既有语法检查,又省略了很多以前繁琐的操作,可以让开发人员将更多的注意力集中到业务的处理上,提高他们的效率

同时一些好的ORM还会有缓存处理、合并执行SQL等其它功能;它绝对是现代中小型系统的开发必备

❿ 开发ERP 不直接连接数据库 还可以怎么连接

数据库的应用,肯定是要连接数据库的,如果说出于安全考虑,可以分几个层面:
1,代码层面,可以通过orm框架技术来做,这个要根据你的技术平台来采用对应的orm框架技术,本质上来说,它还是直接连接了数据库,只是对开发过程来说,显得没有和数据库直接打交道而已, 它本身并不保证安全,只是中间层的封装,除非看配置文件,否则也不知道数据库是什么数据库而已。分层结构的代码原理也是类似orm,独立出数据库访问操作,但也只是业务层不直接访问数据库而已,对安全性上,于orm一样,没有实质性的保证。
2,架构层面,你的应用代码,并不直接把数据提交到数据库,而是提交给一个中间层,在传统的C/S架构中,你的业务逻辑在C层,只是把数据提交到S层,由S层负责保存到数据库,这样你的业务代码根本不知道后台有数据库,只知道后台有个服务端,只要服务端怎么保存数据是不用业务端考虑的,比如网络游戏,游戏只关心服务端在哪里,而不知道服务端怎么存数据库。B/S架构中,如果是简单的单服务器,S端和数据库在一台服务器,安全性考虑在服务器安全层面。就算是有独立数据库服务器,原理也是一样的。
3,网络层面,隔绝非业务访问是你要考虑的事情,就是说除了你的代码所在的应用服务器,其他地址是禁止访问它的。
你说的json,它只是格式,不是安全性手段,json在web中的应用更多,因为浏览器可以通过js解析,但实质上,web应用就是b/s架构,你的S端其实就是在直接访问数据库,如果S端的编码没有检查sql注入的安全性机制,数据库一样是不安全的。