Hibernate基础

1.  ORM简介

Hibernate是一个对象关系映射(ORM)框架;关系对象映射,就是把关系和对象映射起来,关系指的是关系数据库,对象指的是程序中的类对象。


2.  Hibernate各种文件作用
1) POJO类及其映射文件。
(1) POJO类:对应数据库中表生成不同的类似JavaBean的类,但不具有业务逻辑处理能力,只能用于数据的装载。
(2) *.hbm.xml映射文件
 将类中的属性和表的字段一一对应,以及表之间的关联。其中*一般定义为要映射的类名,该文件在项目中的位置一般与POJO类处于同一目录。
 配置介绍:




    
        
            
            
        
        
            
        
    
标签为该映射文件的根标签,其他元素均必须编写在其内部。
用来指定生成的类,其中name属性指定POJO类,table属性指定该POJO类对应的数据库的表名。
标签支出POJO标识符和数据库标识符的映射关系。
用来指定该持久化实例的唯一标识符生成器。
指定一般的POJO属性域数据库表字段的映射。
Hibernate的映射文件时实体对象与数据库关系表之间相互转换的重要依据。
2) Hibernate核心配置文件
系统在添加Hibernate能力时会自动创建Hibernate核心配置文件hibernate.cfg.xml






	
		
			org.hibernate.dialect.SQLServerDialect
		
		
			jdbc:sqlserver://localhost:1433
		
		sa
		123456
		
			com.microsoft.sqlserver.jdbc.SQLServerDriver
		
		
			sqlsrv_test
		
		


	


Hibernate在初始化期间会自动在CLASSPATH中寻找本文件。
3) HibernateSessionFactory类
在Hibernate中,Session负责完成对象持久化操作。该文件负责创建Session对象,以及关闭Session对象。
Session对象创建包括3步骤:
(1) 初始化Hibernate配置管理类Configuration;
(2) 通过Configuration类创建Session的工厂类SessionFactory;
(3) 通过SessionFactory得到Session实例

3.  Hibernate工作流程
Hibernate最终目的是获得Session对象来对数据库进行Create、Update、Read、Delete操作。
Hibernate获取Session对象的流程(即HibernateSessionFactory类):
1)   创建一个Configuration类实例,该类是整个Hibernate程序的启动类
private static Configuration configuration  = new Configuration ();
2) 加载Hibernate核心配置文件,应用Configuration类实例调用其configrue函数,读入指定的配置文件即(Hibernate.cfg.xml)
configuration.configure();
其实该函数中可以带入参数,参数值就是指定配置文件的路径,但如果该文件放在classes下子会被自动加载。通过该操作,需要连接的数据库及其属性都设置完成了。
3) 创建SessionFactory对象,通过Configuration对象获取到的配置文件信息创建SessionFactory对象
serviceRegistry = new ServiceRegistryBuilder().applySettings(configuration.getProperties()).buildServiceRegistry();
sessionFactory = configuration.buildSessionFactory(serviceRegistry);
4) 创建Session对象,SessionFactory是获得Session对象的工厂,得到该类对象后,就可以很容易得到Session对象
session = (sessionFactory != null) ? sessionFactory.openSession()
					: null;
最后可应用Session对数据库进行操作。通过类Transaction进行Session的save()、delete()、update()操作。当使用Session的对数据库进行操作时,都是在对Session的缓存进行操作,并没有直接操作数据库,Hibernate把这些操作用事务来控制,当调用事务的commit()方法是,才能真正执行数据库读写操作。如果没有对其进行commit()操作,那么保存或更新的内容只是保存在Session中,当Session关闭后,内容就会从内存中清楚,而数据库却没有变化。
Hibernate层的作用就是把数据库的表映射成类,然后应用程序运用Hibernate框架提供的操作数据的接口来对数据库进行操作,取代JDBC,实现面向对象的操作。

4.  Hiberante核心接口
1) Configuration接口
Configuration负责管理Hibernate的配置信息。Hibernate运行时需要一些底层实现的基本信息,包括:数据库URL、数据库用户名、 数据库用户密码、数据库JDBC驱动器、数据库dialect。
这些属性在Hibernate配置文件hibernate.cfg.xml,当调用
Configuration cfg = new Configuration().configure();
时,Hibernate会自动在根目录下搜索hibernate.cfg.xml文件,并将其读取到内存中作为后续操作的基础配置。
2) SessionFactory接口
SessionFactory负责创建Session实例,由Configuration实例构建SessionFactory:
Configuration cfg = new Configuration().configure();
SessionFactory sessionFactory = cfg.bulidSessionFactory();
Configuration实例cfg会根据当前的数据库配置信息,工作SessionFactory实例并返回。
SessionFactory一旦构造完成,对cfg不会修改不会影响到已创建的SessionFactory实例。
SessionFactory保存了对应数据库配置的所有映射关系,同时也负责维护当前的二级数据缓存和Statement Pool。在系统设计中应充分考虑SessionFactory的重用策略。由于SessionFactory采用了线程安全的设计,可由多个线程并发调用,大多数情况下,应用中针对一个数据库共享同一个SessionFactory实例即可。
3) Session接口
Session是Hibernate 持久化操作的基础,提供了众多持久化方法,如save、update、delete、query等方法。
Hibernate框架中的Session的设计是非线程安全的,即一个Session实例只可以由一个线程使用,对同一个Session实例的多线程并发调用将导致难以预知的错误。
SessionFactory sessionFactory = cfg.buldSessionFactory();
Session session = sessionFactory.openSession();
4) Transaction接口
Transation是Hibernate中进行事物操作的接口,Transaction接口是对实际事物的一个抽象,这些实现包括JDBC的事物,JTA中的UserTransaction,甚至是CORBA事务。
Transaction session.beginTransaction();
5) Query接口
Query接口是Hibernate查询接口,用于向数据库中查询对象,它在里面包装了一种HQL查询语言,采用了新的面向对象的查询方式。

你可能感兴趣的:(Hibernate)