Hibernate学习总结

通过对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实例来指定主配置文件的位置,然

例来指定主配置文件的位置,然后创建会话工厂。

②Sessionfactory接口

一个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();


 

Criteria分页查询

如查询从第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的新人来说以上内容有的可能不是太准确,还请多多指教。


评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值