1.为什么需要使用Hibernate
1)Hibernate是一个基于JDBC的主流持久化框架,是一个优秀的ORM实现,可以自动完成object和关系数据库之间的转换,提高开发效率。用Hibernate,通过面向对象的方式进行查询(对查询结果自动封装到实体,而不像jdbc那样手动封装)、轻量级封装jdbc操作是它最大的优势。
2)hibernate可以跨数据库。 作为一个通用orm框架,首先必须兼容主流的数据库,如果hibernate只能在某一个数据库上跑。那它肯定不会有目前的成就。
3)结果这一点就变成了很多产品开发的基础,这些产品只需要关注自己的业务,不需要考虑在不同的数据库之间进行迁移了,一切底层都交给hibernate,只做好自己擅长的事情,花最少的时间获得最大的价值。
4)hibernate上面附着了一大堆的扩展,hibernate-validator可以做数据校验,hibernate-search可以玩全文检索,hibernate-shard可以做水平分表。
Hibernate的性能非常好,因为它是个轻量级框架,映射的灵活性很出色。它支持各种关系数据库,从一对一到多对多的各种复杂关系。
2.Hibernate使用步骤
1) 导入hibernate的jar文件和数据库的jar文件
2) 编写hibernate配置文件,hibernate.cfg.xml,默认放在src目录,此文件保存数据库的连接信息,hibernate全局属性信息,以及关联的实体映射文件。
3) 编写实体及实体映射文件。如果是在3.2以上版本,则可用注解的方式,可不需要编写.hbm.xml文件。
编写完了配置文件之后,具体的使用步骤如下:
1) 读取并解析配置文件
2) 读取并解析映射信息,创建SessionFactory
3) 打开Session
4) 创建事务Transaction
5) 持久化操作
6) 提交事务
7) 关闭Session
8) 关闭SessionFactory
上面这些步骤是在单独使用Hibernate的步骤,如果通过spring集成Hibernate,则代码更加的简单。例如使用Spring的AOP声明式事务,则不需要手工开启和关闭Session及提交或回滚事务。
3.iBatis与Hibernate有什么不同?
相同点:屏蔽jdbc api的底层访问细节,使用我们不用与jdbc api打交道,就可以访问数据。
jdbc api编程流程固定,还将sql语句与java代码混杂在了一起,经常需要拼凑sql语句,细节很繁琐。
ibatis的好处:屏蔽jdbc api的底层访问细节;将sql语句与java代码进行分离;提供了将结果集自动封装称为实体对象和对象的集合的功能,queryForList返回对象集合,用queryForObject返回单个对象;提供了自动将实体对象的属性传递给sql语句的参数。
Hibernate是一个全自动的orm映射工具,它可以自动生成sql语句,ibatis需要我们自己在xml配置文件中写sql语句,hibernate要比ibatis功能负责和强大很多。因为hibernate自动生成sql语句,我们无法控制该语句,我们就无法去写特定的高效率的sql。对于一些不太复杂的sql查询,hibernate可以很好帮我们完成,但是,对于特别复杂的查询,hibernate就很难适应了,这时候用ibatis就是不错的选择,因为ibatis还是由我们自己写sql语句。