什么是Hibernate呢?首先,Hibernate是数据持久层的一个轻量级框架,实现了ORMapping原理(Object Relational Mapping)。
在说hibernate之前,简单说一下什么是ORM。
ORMapping基本对应规则:(这是查到的一些资料,有些规则,还没有考究)
1:类跟表相对应
2:类的属性跟表的字段相对应
3:类的实例与表中具体的一条记录相对应
4:一个类可以对应多个表,一个表也可以对应对个类
5:DB中的表可以没有主键,但是Object中必须设置主键字段
6:DB中表与表之间的关系(如:外键)映射成为Object之间的关系
7:Object中属性的个数和名称可以和表中定义的字段个数和名称不一样
ORMapping的基本实现方式:
使用JDBC,用SQL来操作数据库,只是看动态生成还是人工写代码来实现。
大家想想,我们以前是怎么做的?
现在Hibernate做了什么呢??它做了下图工作
如上图:Hibernate主要用来实现Java对象和表之间的映射,同时提供访问数据的CRUD方法,代替手工书写SQL语句的繁琐,降低拼写错误,这样在很大程度上减少了开发过程人工使用SQL和JDBC处理数据的时间。
适用Hibernate的优点
1.使用简介的hql语句(Hibernate query language)。可以不使用传统的insert,update等sql语句。比如insert一个对象,原来的做法是:insert into 表名称 alue(值1,值2,值3,……),而现在的做法是:save(对象)。
2.使用or映射。对象到关系数据库之间的映射。是从对象的角度操作数据库,再次体现了面向对象思想。原来的实体抽取方法:首先有了表,然后表映射实体对象。而现在Hibernate做法是:直接由对象映射到表。
3.没有侵入性,移植性比较好。什么是没有侵入性?就是Hibernate采用了pojo对象。所谓的pojo对象就是没有继承Hibernate类或实现Hibernate接口。这样的话,此类就是一个普通的java类,所以移植性比较好。
4.支持透明持久化。透明是针对上层而言的。三层架构的理念是上层对下层的依赖,只是依赖接口不依赖具体实现。而Hibernate中的透明是指对业务逻 辑层提供了一个接口session,而其他的都封装隐藏。持久化是指把内存中的数据存放到磁盘上的文件中。
5、消除数据库差异。(其实可以说这是ORM的优点)Hibernate可以帮助你消除或者包装那些针对特定厂商的SQL代码,并且帮你把结果集从表格式的表示形式转换到一系列的对象去。
当然数据持久层的框架有很多比如:iBATIS,myBatis,Nhibernate,Siena等等。
任何一个事物存在两面性,不可能十全十美,即使如此优秀的Hibernate也有自己的弱点。
首先是Hibernate不适用的范围,有如下两点:
1、若是大量数据批量操作。则不适合使用Hibernate。
2、并且一个持久化对象不能映射到多张表中。
其次是“抽象”带来的“职业病”,抽象就以为这“通用性”好。那么可想而知,对于“特殊”情况,hbibernate就不擅长了。Hibernate的特长是封装太好,所以,如果想要操作适用于某类型数据库的特性,就只能“saysorry”了。
1.Configuration接口:负责配置及启动Hibernate,用来创建sessionFactory
2.SessionFactory接口:一个 SessionFactory对应一个数据源存储,也就是一个数据库对应一个 SessionFactory。SessionFactory用来创建 Session对象。并且SessionFactory是线程安全的,可以由多个线程访问SessionFactory共享。
3.Session接口:这个接口是Hibernate中常用的接口,主要用于对数据的操作(增删改查)。而这个Session对象不是线程安全的。不能共享。
4.Query接口:用于数据库的查询对象。
5.Transaction接口:Hibernate事务接口。它封装了底层的事务操作,比如JTA(;java transcation architecture)所有的数据操作,比如增删改查都写在事务中。
总结:Hibernate的目标是对于开发者通常的数据持久化相关的编程任务,解放其中的95%。对于以数据为中心的程序来说,它们往往只在数据库中使用存储过 程来实现商业逻辑,Hibernate可能不是最好的解决方案;对于那些在基于Java的中间层应用中,它们实现面向对象的业务模型和商业逻辑的应用,Hibernate是最有用的。
基本的概念以及核心接口已经介绍,欲知后续,请听下回分解。欢迎指正。Hibernate进化史-------Hibernate概述
原文地址:http://blog.csdn.net/wangyongxia921/article/details/39904253