通过对Hibernate的学习,我主要从五个方面对Hibernate进行总结,分别是以下五个方面:
一、Hibernate文件配置。
二、Hibernate使用步骤和五大接口。
三、实体对象的三种状态。
四、HQL查询和Criteria查询的使用。
五、Hibernate加载计划和策略。
下面我对这五个方面进行详细的阐述。
一、Hibernate文件配置
Hibernate文件配置包括主配置文件和实体映射文件。
1. 配置主配置文件
主配置文件的信息主要包括以下四点:
①数据库连接信息:驱动程序类名、URL、用户名、密码。
②Hibernate相关特性:dialect(方言)、show_SQL(输出SQL语句到控制台)、format_SQL(格式化SQL语句)。
③连接池相关信息。
④注册ORM实体实体类映射文件。
2. 配置实体映射文件
实体映射文件就是实体类与数据库表之间的逻辑映射。所以在配置实体映射文件前必须设计好各实体类的属性和关系,然后再
配置实体映射文件。
配置实体映射文件主要有四个步骤:
①创建实体类。实体类中必须有get、set 方法和无参构造器。
②创建和配置映射文件。
根据实体类之间关联关系的不同常用的映射文件有一对多、多对一、多对多三种。
③在主配置文件中添加实体映射文件路径。
④进行测试。
注:对于初学阶段的我们,Hibernate文件配置自己不一定会写,只要能修改文件源码可以使用就可以了,如果能够自己写出来那就更好了。
二、Hibernate使用步骤和五大接口。
Hibernate的使用步骤
Hibernate使用步骤分为七步(如下图)
Hibernate的五大接口
①Configuration接口
Configuration对象用来配置和引导Hibernate,一个Hibernate应用使用一个Configuration实例来指定主配置文件的位置,然
例来指定主配置文件的位置,然后创建会话工厂。
一个Hibernate应用从SessionFactory(会话工厂)里获得会话实例;
一般情况下,整个应用只有唯一的一个SessionFactory,它应该在应用初始化时被创建。
③Session接口
Session实例是轻量级的,它拥有操作持久化对象的一系列API,一般在使用后关闭它。
④Fransaction
事务接口,主要定义了commit()和rollback()两个方法,前者是提交事务后者是回滚事务。
⑤Query接口
查询接口,查询结果返回的是结果集。
三、实体对象的三种状态
实体对象的三种状态分别是瞬时状态(Transient)、持久状态(Persistent)、游离状态(Detached)。
①瞬时状态
刚用new语句创建,还没有被持久化,切不处于Session的缓存中。
②持久状态
已经被持久化,切加入到Session的缓存中。
③游离状态
已经被持久化,但不在处于Session的缓存中。
三种状态的转换(如下图)
四、HQL查询和Criteria查询的使用。
Hibernate支持两种主要的查询方式:HQL查询和Criteria查询。
①HQL查询是一种面向对象的查询语言,没有表和字段的概念,只有类、对象和属性的概念,应用较为广泛。where子句操作符与SQL相同。这可以帮助我们更快的学习HQL。
HQL的参数绑定有两种分别是利用定位参数和利用命名参数。Query接口提供了多个设置参数的方法,用来绑定参数,如setInteger()、setTimestamp()、setLocale()等,还有一种允许绑定任何Hibernate类型实参的方法setParameter(),该方法可以自动找出正确的类型。在Hibernate中使用定位参数,代码如下:
String hql = "from Position where name like ? and createDay> ?";
Query query = sf.openSession().createQuery(hql). setParameter(0,aName).setParamete(1,aDate);
Query接口支持对查询结果进行分页处理,query.setFirstResult(1);——开始获取对象的行数;query.setMaxResults(5);——获取对象的数目,这两句代码的意思就是从第2个对象起获取接下来的5个对象
HQL中的分组函数有count()、min()、max()、sum()和avg(),含义和SQL中定义的一样。
② Criteria查询又称“对象查询”,他用面向对象的方式将构造查询的过程做了封装。
Criteria查询的使用
Criteria criteria = session.createCriteria(**.class);
List users = criteria.list();
Criteria实例必须与Session绑定,其生命周期随着Session的结束而结束。
Criteria查询 Restrictions常用的查询条件和SQL的比较
Criteria查询的排序查询代码如下
Criteria criteria = session.createCriteria(Seeker.class);
criteria.addOrder(Order.asc("birth"));
List users = criteria.list();
如查询从第20个coder开始的35个coder的信息,代码如下:
Criteria criteria = session.createCriteria(Coders.class);
criteria.setFirstResult(50);
criteria.setMaxResults(40);
List coder = criteria.list();
五、Hibernate加载计划和策略
Hibernate提供了下列方法从数据库中获取对象:
1. 通过get()和load()方法按照id获取对象。
2.从一个已经加载的对象开始,通过系列的get方法访问被关联的对象。
3.HQL查询获取单个或系列对象。
4.Criteria查询获取单个或系列对象。
5.原生SQL查询获取单个或系列对象。
Hibernate默认加载计划
1. 关联对象和关联集合的默认加载计划是:延迟加载,也就是说加载助对象时它们不会被立即加载,加载的只是代理对象,直到发出SQL语句是才会被加载。
2. 主对象是否延迟加载取决于使用的方法,load()方法是延迟的,其他方法是立即加载的。
3. 主对象的属性默认是立即加载的。
改变Hibernate默认加载计划,可以在实体映射文件中修改,但是如果这样做不管是否需要关联数据,HIbernate都回家再,造成
大量内存浪费。
如果要禁用代理对象的生成,可以在映射文件中作如下改动:
<class name="..." table="..." lazy=" false">...</class>
如果想让属性也延迟加载我们可以映射文件的property节点增加lazy属性就可以实现属性的延迟加载。
======================================================================================================
作为刚学习Hibernate的新人来说以上内容有的可能不是太准确,还请多多指教。