hibernate原理

 Hibernate是一个开放源代码的对象关系映射框架。
      Hibernate对JDBC进行了非常轻量级的对象封装,它将POJO(Plain Ordinary Java Object:简单的java对象,实际就是普通JavaBean)与数据库表建立映射关系,是一个全自动的orm(Object Relational Mapping:对象关系映射)框架,使得Java程序员可以随心所欲的使用对象编程思维来操纵数据库。这样就不需要和复杂的sql打交道,只要像操作对象一样的操作它就可以了(把关系数据库的字段在内存中映射成对象的属性)。
      Hibernate可以应用在任何使用JDBC的场合,既可以在Java的客户端程序使用,也可以在Servlet/JSP的Web应用中使用,最具革命意义的是,Hibernate可以在应用EJB的J2EE架构中取代CMP,完成数据持久化的重任。

ORM工具简化了数据创建,数据处理和数据访问。它是将对象映射到数据库中存储的数据(表)的编程技术。

 


hibernate工作原理:
1、调用Configuration类,通过Configuration config = new Configuration().configure();读取并解析hibernate.cfg.xml配置文件
2、通过hibernate.cfg.xml中的<mapping resource="com/xxx/Xxx.hbm.xml"/>读取并解析映射信息
3、通过SessionFactory sessionfactory = config.buildSessionFactory();通过读取的这些配置信息创建一个sessionfactory对象
4、Session session = sessionfactory.openSession();通过sessionfactory生成一个Sesssion对象
5、Transaction ts = session.beginTransaction();通过session对象创建并启动事务Transation
6、通过Session对象的get()、sava()、update()、delete()和saveOrupdate()等方法对PO进行加载,保存,更新,删除等操作;
7、在查询的情况下,可通过Session对象生成一个Query对象,然后利用Query对象执行查询操作。如果没有异常,Transaction对象将提交这些操作结果到数据库中,否则会回滚事务。

 


Hibernate是如何连接数据库?
主要是通过hibernate.cfg.xml配置文件中的配置。在这个文件中定义了数据库进行连接所需要的信息,包括JDBC驱动、用户名、密码、数据库方言等,configuration类借助dom4j的XML解析器解析设置环境,然后使用这些环境属性来生成 SessionFactory。这样这个sessionFactory生成的session就能成功获得数据库的连接。
hibernate.cfg.xml

<!DOCTYPE hibernate-configuration PUBLIC
"-//Hibernate/Hibernate Configuration DTD 3.0//EN"
"http://www.hibernate.org/dtd/hibernate-configuration-3.0.dtd">

<hibernate-configuration>
<session-factory>
<!-- 连接数据库的基本配置 -->
<property name="hibernate.connection.driver_class">com.mysql.jdbc.Driver</property>
<property name="hibernate.connection.url">jdbc:mysql:///student?characterEncoding=utf-8</property>
<property name="hibernate.connection.username">root</property>
<property name="hibernate.connection.password">root</property>


<!-- 配置方言 -->
<property name="hibernate.dialect">org.hibernate.dialect.MySQL5Dialect</property>

<!-- 显示sql语句 -->
<property name="hibernate.show_sql">true</property>

<!-- 格式化显示SQL -->
<property name="format_sql">true</property>

<!-- 告诉主配置文件,在加载该配置文件的时候,加载对应的映射文件 -->
<mapping resource="org/danni/model/entity/Admin.hbm.xml" />
<mapping resource="org/danni/model/entity/Department.hbm.xml" />
<mapping resource="org/danni/model/entity/Employee.hbm.xml" />
</session-factory>
</hibernate-configuration>

 


Hibernate框架有很多优点:
1、开源和轻量级: Hibernate框架是根据LGPL许可证和轻量级的开源工具。
2、快速性能: Hibernate框架的性能很快,因为缓存在Hibernate框架内部使用。 hibernate框架中有两种类型的缓存:一级缓存和二级缓存。一级缓存默认是启用的。
3、数据库独立查询: HQL(Hibernate查询语言)是面向对象的SQL版本。 它生成数据库独立查询。 所以你不需要编写数据库特定的查询语句。 在Hibernate之前,如果项目更改了数据库,我们需要更改SQL查询,从而导致维护变得非常复杂。
4、自动创建表: Hibernate框架提供了自动创建数据库表的功能。 因此,无需手动在数据库中创建表。
5、简化复杂连接: 在hibernate框架中可轻松获取多个表中的数据。
6、提供查询统计和数据库状态: Hibernate支持查询缓存,并提供有关查询和数据库状态的统计信息。

hibernate核心接口
session:负责对持久化对象CRUD操作
sessionFactory:负责初始化hibernate,创建session对象
configuration:负责配置并启动hibernate,创建SessionFactory
Transaction:负责事物相关的操作
Query和Criteria接口:负责执行各种数据库查询

1、会话工厂(SessionFactory接口)
SessionFactory是ConnectionProvider的会话和客户端工厂。 它拥有数据的二级缓存(可选)。SessionFactroy接口负责初始化Hibernate。它充当数据存储源的代理,org.hibernate.SessionFactory接口提供了工厂方法来获取Session的对象。
需要注意的是SessionFactory并不是轻量级的,因为一般情况下,一个项目通常只需要一个SessionFactory就够,当需要操作多个数据库时,可以为每个数据库指定一个SessionFactory。

2、会话(Session)
Session对象提供应用程序和存储在数据库中的数据之间的接口。 它是一个短生命周期的对象并包装JDBC连接。 它是事务,查询和标准的工厂。 它拥有一级缓存(强制性)数据。 org.hibernate.Session接口提供插入,更新和删除对象的方法。 它还提供了事务,查询和标准的工厂方法。

3、事务(Transaction接口)
Transaction接口负责事务相关的操作,一般在Hibernate的增删改中出现, org.hibernate.Transaction接口提供事务管理的方法。但是使用Hibernate的人一般使用Spring去管理事务。

4、连接提供者(ConnectionProvider)
它是一个JDBC连接工厂。 它从DriverManager或DataSource抽象出来的应用程序。 它是一个可选项。

5、Configuration接口:
Configuration对象用于配置并根启动Hibernate。Hibernate应用通过Configuration实例来指定对象—关系映射文件的位置或者动态配置Hibernate的属性,然后创建SessionFactory实例。
我们可以查看Configuration的源代码,它的configure()方法是这样实现的:

public Configuration configure() throwsHibernateException { 
configure("/hibernate.cfg.xml" );//此处指定了ORM文件的位置 
return this; 
} 

 


---------------------
 
原文:https://blog.csdn.net/qq_36748278/article/details/78024826

posted @ 2019-04-21 21:13  天涯已可  阅读(242)  评论(0编辑  收藏  举报