问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

hibernate是如何实现ORM的?

发布网友 发布时间:2022-04-29 22:47

我来回答

3个回答

懂视网 时间:2022-04-30 03:09

JDBC回顾-ORM规范

技术分享

JDBC操作步骤
  • 注册数据库驱动
    Class.forName(“JDBCDriverClass”)
  • 数据库 驱动程序类 来源
    Access sun.jdbc.odbc.JdbcOdbcDriver JDK中
    MySql com.mysql.jdbc.Driver 下载MySql驱动包
    Oracle oracle.jdbc.driver.OracleDriver 下载对应的驱动包
    SQL Server com.microsoft.sqlserver.jdbc.SQLServerDriver 下载对应的驱动包

    为了使用驱动包,需要将下载的驱动包添加到类路径下面

  • 创建Connection类型对象
    Connection connection = DriverManager.getConnection(databaseURL,username,password);
    Access不需要username,password参数
  • 数据库 URL模式
    Access jdbc:odbc:dataSource
    MySQL jdbc:mysql://hostname/dbname
    Oracle jdbc:oracle:thin:@hostname:port#:oracleDBSID (port#表示端口号,oracleDBSID是定位数据库的数据库名,)
    SQL Server jdbc:sqlserver://hostname:port;DatabaseName=数据库名
  • 获得Statement类型对象
    Statement statement = connection.createStatement()

  • 执行查询或者更新
    可以使用executeUpdate()执行SQL DDL(数据定义语言)或更新语句
    可以使用executeQuery()执行查询语句

  • 处理ResultSet类型对象
    查询结果存在ResultSet中,可以使用next()移动游标到下一行,使用getXXX(XXX为数据类型)获取当前行的列值

  • 释放资源
    connection.close()

  • ORM
     全称Object/Relation Mapping,对象/关系映射
     ORM框架:完成面向对象的程序设计语言到关系数据库的映射
     目前的产品很多,如:Apache组织下的OJB,Oracle的TopLink,JDO,JPA等
     优点:提高生产效率,可维护性
    

    hibernate学习笔记之一(JDBC回顾-ORM规范)

    标签:hibernate   jdbc   orm   

    热心网友 时间:2022-04-30 00:17

    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文件格式我简单做下介绍,比如<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还使用了事务控制、缓存控制等很多技术

    热心网友 时间:2022-04-30 01:35

    你把对象和数据库里的表的 对应关系告诉他。他就能自动生成sql语句

    然后hibername在用 jdbc 去执行sql语句
    声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
    为什么电脑上的word界面变小为什么WORD里面的页面变的很小怎么设置回来... AHA拯救心脏救命术(Basic Life Support,BLS) 基础生命的基本顺序 机械制图第一视角与第三视角的区别 明日之后野外感染者据点都在什么地方 感染就聚集点位置分享 明日之后 明日之后哪些地图有强力感染者? 《明日之后》野外感染者据点一览 明日之后野外感染者据点去哪找 妙洁提醒你注意:保鲜膜有些不能加热 有些不能包肉 C盘里文件的修改日期是不是就代表那天我用过电脑,我是上午用的,可文件... 有谁知道怎么才能让更多的人加入自己呢? 在电影中人们总是叫他: 卷毛 的那个戴眼镜的胖头胖身子的那个男人真名叫什么啊? 80年代的男歌手都有谁 戴眼镜的华语男歌手 比较年轻的 一个戴眼镜白围脖的歌手是谁? 戴眼镜的内地、港台华语流行歌手都有谁 华为备忘录怎么导入苹果手机 华为手机里的东西怎么导入苹果手机 华为怎么把资料导入苹果手机 新浪微博私信超过字数对方会全部收到吗 阿拉斯加鳕鱼柳怎么做好吃 苹果手机怎么设置一键打电话 微博粉丝网怎么样.有人在这网站加过粉丝么? IPhone+13怎么自动拨打电话? iphone4怎么设置一键拨号 iphone5怎么设置一键拨号? 想打舌钉+唇钉+鼻钉+脐环 请问三亚哪个地方有打的? 一般多少钱?? iphone6 plus如何设置一键拨号? 合肥市恐龙馆从安医大附院站坐几路公交车? 唇钉和鼻环哪种好看 电脑长时间关闭防火墙,直播快手王者荣耀有问题吗? lol黑店百地的id是不是“殴打一区优越狗”?他如果总挂机的话不被封号吗?他是LED的上单? 小米10x4g实品店多少钱? lol电信一区 为什么好多王者和钻一的大神都想加 黑店百地的好友 难道就是为了不排在一起么? 还是 一本叫什么疫的书主角是一个小男孩和一只黑狗 小米10x4g怎么样值得买吗 为什么我的在附近人里不显示? 微信附近的人怎么搜不到我我有2个手机2个还是搜不到自己的号,怎么回事? 我申请了一个新的,为什么附近的人看不到我? 东土大唐在哪? 东土大唐在什么地方? 我两个,为什么小号能在附近的人看到大号,大号看不到小号 《西游记》中的东土大唐是哪里呢? 新申请的附近的人搜不到我怎么办? 为什么我刚注册的附近的人看不到我 要多久才可以让别人在附近看到我 自报家门时,唐僧都会在大唐前加东土二字,有啥含义? 为什么我刚注册的附近的人看不到我 要多久才可以让别人在附近看到我 唐僧说从东土大唐来……蕴含什么道理? 刚刚申请的,为什么附近的人看不到我? 各种微单和单反为什么不配自动镜头盖?