关于Hibernate的,很早之前就听说了,当时也顺手查了查其大致的含义。我们都知道,在程序开发的时候,我们通常将程序分为三层,其中将数据保存到数据库的就是数据持久化层,也就是我们常说的dao层。而Hibernate就是在数据持久化层的一个常用框架。Hibernate的作用就是封装了java程序和数据库之间的的桥梁——JDBC。在此之前我们在开发的过程中,会花费大量的时间去处理怎样和数据库连接的问题,而且往往jdbc的配置会因数据库的不同而不同,然而现在有了它,我们需要做的就是在配置文件中,写入几行固定的配置信息,即便有不一样的,也是相当少的。
由于Hibernate是当前java中比较流行的数据持久层的框架,所以在百度上的介绍也是十分丰富的,所以笔者也不在此赘述了。接下来谈一下Hibernate中的几个核心的接口和类:
Hibernate的核心类和接口一共有6个,分别为:Session、SessionFactory、Transaction、Query、Criteria和Configuration。这6个核心类和接口在任何开发中都会用到。通过这些接口,不仅可以对持久化对象进行存取,还能够进行事务控制。下面对这6个核心接口和类分别加以介绍。
Session
Session接口负责执行被持久化对象的CRUD操作(CRUD的任务是完成与数据库的交流,包含了很多常见的SQL语句)。但需要注意的是Session对象是非线程安全的。同时,Hibernate的session不同于JSP应用中的HttpSession。这里当使用session这个术语时,其实指的是Hibernate中的session,而以后会将HttpSession对象称为用户session。
SessionFactory
SessionFactory接口负责初始化Hibernate。它充当数据存储源的代理,并负责创建Session对象。这里用到了工厂模式。需要注意的是SessionFactory并不是轻量级的,因为一般情况下,一个项目通常只需要一个SessionFactory就够,当需要操作多个数据库时,可以为每个数据库指定一个SessionFactory。
Transaction
Transaction 接口是一个可选的API,可以选择不使用这个接口,取而代之的是Hibernate 的设计者自己写的底层事务处理代码。 Transaction 接口是对实际事务实现的一个抽象,这些实现包括JDBC的事务、JTA 中的UserTransaction、甚至可以是CORBA 事务。之所以这样设计是能让开发者能够使用一个统一事务的操作界面,使得自己的项目可以在不同的环境和容器之间方便地移植。
Query
Query接口让你方便地对数据库及持久对象进行查询,它可以有两种表达方式:HQL语言或本地数据库的SQL语句。Query经常被用来绑定查询参数、限制查询记录数量,并最终执行查询操作。
Criteria
Criteria接口与Query接口非常类似,允许创建并执行面向对象的标准化查询。值得注意的是Criteria接口也是轻量级的,它不能在Session之外使用。
Configuration
Configuration 类的作用是对Hibernate 进行配置,以及对它进行启动。在Hibernate 的启动过程中,Configuration 类的实例首先定位映射文档的位置,读取这些配置,然后创建一个SessionFactory对象。虽然Configuration 类在整个Hibernate 项目中只扮演着一个很小的角色,但它是启动hibernate 时所遇到的第一个对象。
最后说一下Hibernate的优缺点:
Hibernate优点:
1.提高生产力
2.使开发更加对象化
3.可移植性
4.没有侵入性,支持透明持久化
缺点:
1.使用数据库特性的语句,将很难调优
2.对大批量更新存在问题
3.系统中存在大量的统计查询功能才比较合适
总结:
Hibernate是一个比较成熟的框架结构,目前发布的最新版本已经到了4.0/5.0,所以我们用起来是非常便捷而且安全的,但是,对于它的不足之处,还是值得我们去考虑和失去用以及怎么用的。
由于Hibernate是当前java中比较流行的数据持久层的框架,所以在百度上的介绍也是十分丰富的,所以笔者也不在此赘述了。接下来谈一下Hibernate中的几个核心的接口和类:
Hibernate的核心类和接口一共有6个,分别为:Session、SessionFactory、Transaction、Query、Criteria和Configuration。这6个核心类和接口在任何开发中都会用到。通过这些接口,不仅可以对持久化对象进行存取,还能够进行事务控制。下面对这6个核心接口和类分别加以介绍。
Session
Session接口负责执行被持久化对象的CRUD操作(CRUD的任务是完成与数据库的交流,包含了很多常见的SQL语句)。但需要注意的是Session对象是非线程安全的。同时,Hibernate的session不同于JSP应用中的HttpSession。这里当使用session这个术语时,其实指的是Hibernate中的session,而以后会将HttpSession对象称为用户session。
SessionFactory
SessionFactory接口负责初始化Hibernate。它充当数据存储源的代理,并负责创建Session对象。这里用到了工厂模式。需要注意的是SessionFactory并不是轻量级的,因为一般情况下,一个项目通常只需要一个SessionFactory就够,当需要操作多个数据库时,可以为每个数据库指定一个SessionFactory。
Transaction
Transaction 接口是一个可选的API,可以选择不使用这个接口,取而代之的是Hibernate 的设计者自己写的底层事务处理代码。 Transaction 接口是对实际事务实现的一个抽象,这些实现包括JDBC的事务、JTA 中的UserTransaction、甚至可以是CORBA 事务。之所以这样设计是能让开发者能够使用一个统一事务的操作界面,使得自己的项目可以在不同的环境和容器之间方便地移植。
Query
Query接口让你方便地对数据库及持久对象进行查询,它可以有两种表达方式:HQL语言或本地数据库的SQL语句。Query经常被用来绑定查询参数、限制查询记录数量,并最终执行查询操作。
Criteria
Criteria接口与Query接口非常类似,允许创建并执行面向对象的标准化查询。值得注意的是Criteria接口也是轻量级的,它不能在Session之外使用。
Configuration
Configuration 类的作用是对Hibernate 进行配置,以及对它进行启动。在Hibernate 的启动过程中,Configuration 类的实例首先定位映射文档的位置,读取这些配置,然后创建一个SessionFactory对象。虽然Configuration 类在整个Hibernate 项目中只扮演着一个很小的角色,但它是启动hibernate 时所遇到的第一个对象。
最后说一下Hibernate的优缺点:
Hibernate优点:
1.提高生产力
2.使开发更加对象化
3.可移植性
4.没有侵入性,支持透明持久化
缺点:
1.使用数据库特性的语句,将很难调优
2.对大批量更新存在问题
3.系统中存在大量的统计查询功能才比较合适
总结:
Hibernate是一个比较成熟的框架结构,目前发布的最新版本已经到了4.0/5.0,所以我们用起来是非常便捷而且安全的,但是,对于它的不足之处,还是值得我们去考虑和失去用以及怎么用的。