Hibernate 基本概念

什么是Hibernate:

       Hibernate是一个开放源代码的对象关系映射框架,它对JDBC进行了非常轻量级的对象封装,使得Java程序员可以随心所欲的使用对象编程思维来操纵数据库。 Hibernate可以应用在任何使用JDBC的场合,既可以在Java的客户端程序使用,也可以在Servlet/JSP的Web应用中使用,最具革命意义的是,Hibernate可以在应用EJB的J2EE架构中取代CMP,完成数据持久化的重任。

       所以,我们可以从以下几点来理解Hibernate:

       1、Hibernate是对JDBC进一步封装

       原来没有使用Hiberante做持久层开发时,存在很多冗余,如:各种JDBC语句,connection的管理,所以出现了Hibernate把JDBC进行了封装。其实hibernate底层依然是jdbc实现的,只不过jdbc的繁琐操作都让框架来替我们做了,程序员已经从繁琐的jdbc操作中解脱出来了。

       2、Hibernate是开源的一个ORM(对象关系映射)框架

       ORM,即Object-RelationalMapping,它的作用就是在关系型数据库和对象之间做了一个映射。从对象(Object)映射到关系(Relation)(数据库),再从关系(数据库)映射到对象。这样,我们在操作数据库的时候,不需要再去和复杂SQL打交道,也无需关心数据库中的数据类型与数据结构是怎么样的,

       Hibernate可以理解为一个中间件。它负责把java程序的SQL语句接收过来并发送到数据库,而数据库返回的信息由Hibernate接收后直接生成一个对象传给java。

 

       在Hibernate中有两个特有的文件,一个是以.hbm.xml结尾的映射文件,一个是以.cfg.xml结尾的配置文件。.cfg.xml文件的作用是连接数据库,文件内部其实就是一个由user,password,url,driver组成的链接库的基本信息。.hbm.xml文件是对数据库中表的映射文件。 

 

Hibernate 工作原理

1、读取并解析hibernate.cfg.xml配置文件;

2、 由hibernate.cfg.xml中的<mappingresource="com/xx/user.hbm.xml">读取并解析映射信息;

3、通过SessionFactorysf = config.buildSessionFactory();创建SessionFactory

4、Session session = sf.openSession();//打开Sesssion

5、Transaction tx = session.beginTransaction();//创建并启动事务Transation

6、persistent operate操作数据,持久化操作

7、tx.commit();//提交事务

8、关闭Session

9、关闭SesstionFactory

 

 

Hibernate 优点

1、更加对象化:它使用时只需要操纵对象,使开发更对象化,抛弃了数据库中心的思想,完全的面向对象思想。。

2、移植性:因为Hibernate做了持久层的封装,映射的灵活性很出色,它支持各种关系数据库,从一对一到多对多的各种复杂关系。就算是换了数据库,写的所有的代码都具有可复用性。

3、Hibernate是一个没有侵入性的框架,没有侵入性的框架我们称为轻量级框架。

      对比Struts的Action和ActionForm,都需要继承,离不开Struts。Hibernate不需要继承任何类,不需要实现任何接口。这样的对象叫POJO对象。

4、开发效率高:hibernate提供了大量的封装(这也是它最大的缺点),很多数据操作以及关联关系等都被封装的很好,开发者不需写大量的sql语句,这就极大的提高了开发者的开发效率。

5、缓存机制的使用:hibernate提供了缓存机制(session缓存,二级缓存,查询缓存),对于那些改动不大且经常使用的数据,可以将它们放到缓存中,不必在每次使用时都去查询数据库,缓存机制对提升性能大有裨益。

 

缺点:

1、由于对持久层封装过于完整,导致开发人员无法对SQL进行优化,无法灵活使用JDBC的原生SQL,Hibernate封装了JDBC,所以没有JDBC直接访问数据库效率高。要使用数据库的特定优化机制的时候,不适合用Hibernate 

2、框架中使用ORM原则,导致配置过于复杂,一旦遇到大型项目,比如300张表以上,配置文件和内容是非常庞大的,另外,DTO满天飞,性能和维护问题随之而来

3、如果项目中各个表中关系复杂,表之间的关系很多,在很多地方把lazy都设置false,会导致数据查询和加载很慢,尤其是级联查询的时候。

4、Hibernate在批量数据处理时有弱势,对于批量的修改,删除,不适合用Hibernate,这也是ORM框架的弱点

 

 

获得SessionFactory对象

Hibernate 3.0 的写法

//新建Configuration对象
Configuration cfg = new Configuration().configure();
SessionFactory sf = cfg.buildSessionFactory();


Hibernate 4.3

Configuration cfg = new Configuration();

ServiceRegistry sr = newStandardServiceRegistryBuilder().applySettings(cfg.getProperties()).build();

SessionFactory sf = cfg.buildSessionFactory(sr);


Hibernate 5.0

finalStandardServiceRegistry registry =new StandardServiceRegistryBuilder().configure().build();             

SessionFactory sf = new MetadataSources(registry ).buildMetadata().buildSessionFactory();



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值