spring ORM是什么,spring的七大模块有哪些「建议收藏」

spring ORM是什么,spring的七大模块有哪些「建议收藏」spring ORM是什么,spring的七大模块有哪些

大家好,又见面了,我是你们的朋友全栈君。

Spring有七大功能模块,分别是Spring Core,AOP,ORM,DAO,MVC,WEB,Context。 1,Spring Core Core模块是Spring的核心类库,Spring的所有功能都依赖于该类库,Core主要实现IOC功能,Sprign的所有功能都是借助IOC实现的。

 

可以看出ORM是spring七大模块其中之一


ORM的全称是Object Relational Mapping,即对象关系映射。它的实现思想就是将关系数据库中表的数据映射成为对象,以对象的形式展现,这样开发人员就可以把对数据库的操作转化为对这些对象的操作。因此它的目的是为了方便开发人员以面向对象的思想来实现对数据库的操作。

 

ORM和habinate,jpa,mybaits等我们常见的与数据交互的框架是什么关系:这些是实现ORM的的几种方式


对象与关系数据库之间是不匹配,我们把这种不匹配称为阻抗失配,主要表现在:

  • 关系数据库首先不支持面向对象技术如继承、多态,如何使关系数据库支持它们;
  • 关系数据库是由表来存放数据,而面向对象使用对象来存放状态;其中表的列称为属性,而对象的属性就是属性,因此需要通过解决这种不匹配;
  • 如何将对象透明的持久化到关系数据库表中;
  • 如果一个对象存在横跨多个表的数据,应该如何为对象建模和映射。

其中这些阻抗失配只是其中的一小部分,比如还有如何将SQL集合函数结果集映射到对象,如何在对象中处理主键等。

ORM框架就是用来解决这种阻抗失配,提供关系数据库的对象化支持。

ORM框架不是万能的,同样符合80/20法则,应解决的最核心问题是如何在关系数据库表中的行和对象进行映射,并自动持久化对象到关系数据库。

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文件格式我简单做下介绍,比如<name sex=”male”>tom</name>这句就是一个XML格式的描述,name代表节点,节点必须有开始标记<name>和结束标记</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类,通过这两个类的方法我们就可以获取数据库表的字段名、类型、大小等相关信息。 
在这里我只是给大家把实现ORM功能的一些关键技术提了出来,通过上面介绍大家对ORM机制应该有个大概了解,比如通过解析数据库配置文件获取数据库连接信息并建立连接,通过解析映射文件可以获取映射类名、属性名、表名以及字段名等信息,得到名字后通过反射机制可以得到映射类信息,调用构造方法创建对象,调用每个属性的set方法给对象设值完成数据的装载。Hibernate就是采用这个过程来实现ORM的,当然Hibernate还使用了事务控制、缓存控制等很多技术……

转:http://www.cnblogs.com/bendantuohai/p/4711340.html

谢!

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/105988.html原文链接:https://javaforall.cn

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)


相关推荐

  • java四舍五入_Java几种常见的四舍五入的方法

    java四舍五入_Java几种常见的四舍五入的方法展开全部下面给你介绍3种常见的四舍五入://方式e68a8462616964757a686964616f31333365653764一:BigDecimal方式doublef=3.1315;BigDecimalb=newBigDecimal(newDouble(f).toString);doublef1=b.setScale(3,BigDecimal.ROUND_HALF…

  • shiro框架的使用_ug星空安装步骤

    shiro框架的使用_ug星空安装步骤1.Shiro框架详解一、Shiro能干什么&amp;nbsp;ApacheShiro是一个强大易用的Java安全框架,提供了认证、授权、加密和会话管理等功能:&amp;nbsp;认证-用户身份识别,常被称为用户“登录”;授权-访问控制;密码加密-保护或隐藏数据防止被偷窥;会话管理-每用户相关的时间敏感的状态。对于…

  • BM3D 算法原理详细解析 按过程步骤讲解(附C++实现代码)[通俗易懂]

    BM3D 算法原理详细解析 按过程步骤讲解(附C++实现代码)[通俗易懂]BM3D是2007年提出的算法了,至今已经有一些年头了,但是仍然不妨碍它基本上还是最强的去噪算法。在初步了解了BM3D的算法后,会发现,BM3D有种堆叠怪的嫌疑。有很多不同的算法的影子在里面,比如Non-LocalMeans、Waveletshrinkage等。我感觉思想更像是暴力出奇迹吧。但是架不住效果好。就类似现在的神经网络,一层不行我就来两层。但是相比简单的堆叠,BM3D还是比其他的算法的细节保留上要好一些。好了,不废话了,下面直接来看BM3D的算法原理吧。BM3D算法原理:

  • QQ好友界面_qq怎么群发消息给好友列表

    QQ好友界面_qq怎么群发消息给好友列表效果如下:依次为图一图二图三图四主要实现效果:点击主标题显示下拉好友,再点击收起下拉好友;鼠标移到好友上背景颜色改变;选中的好友背景颜色也要改变;代码如下:<!DOCTYPEht

  • MIPI协议的DCS指令格式[通俗易懂]

    MIPI协议的DCS指令格式[通俗易懂]虽然读了几遍MIPIPHY/DSI/DCS标准,还是有点糊涂,把DataType和DCScommand有些混淆,浪费了不少的时间。ILI9488的指令中把DCSPacket的组成用图示展示了出来,非常直观,真是一图胜千言啊!回头再看DSI的文字描述就印象深刻了,巨坑啊!!!

  • 免费ip代理池创建[通俗易懂]

    免费ip代理池创建[通俗易懂]反爬技术越来越成熟,为了爬取目标数据,必须对爬虫的请求进行伪装,骗过目标系统,目标系统通过判断请求的访问频次或请求参数将疑似爬虫的ip进行封禁,要求进行安全验证,通过python的第三方库faker可以随机生成header伪装请求头,并且减缓爬虫的爬取速度,能很好的避过多数目标系统的反扒机制,但对一些安全等级较高的系统,也有极大的可能ip被封禁,当ip被封禁后,通过更换代理ip便可以继续爬取,所以具有一个有效的ip代理池是非常重要的,网上有很多动态ip代理提供商,但如果能有一个自己免费的ip代…

发表回复

您的电子邮箱地址不会被公开。

关注全栈程序员社区公众号