hibernate

Hibernate简介

1.Hibernate是对JDBC进一步封装

原来没有使用Hiberante做持久层开发时,存在很多冗余,如:各种JDBC语句,connection的管理,所以出现了HibernateJDBC封装了一下,我们不用操作数据,直接操作它就行了。

2.分层的角度:

非常典型的三层架构:表示层,业务层,还有持久层。Hiberante也是持久层的框架,而且持久层的框架还有很多,比如:IBatisNhibernateJDOOJBEJB等等。

3.Hibernate是一个ORM(对象关系映射)框架。

ORM,即Object-Relational Mapping,它的作用就是在关系型数据库和对象之间做了一个映射。从对象(Object)映射到关系(Relation),再从关系映射到对象。这样,我们在操作数据库的时候,不需要再去和复杂SQL打交道,只要像操作对象一样操作它就可以了(把关系数据库的字段在内存中映射成对象的属性)。

4.提供了缓存功能:一级缓存,二级缓存

 

Hibernate简介整体流程

 

 

1:通过configuration来读cfg.xml文件

2:得到SessionFactory 工厂

3:通过SessionFactory 工厂来创建Session实例

4:通过Session打开事务

5:通过sessionapi操作数据库

6:事务提交

7:关闭连接

 

Hibernate中对象状态

Hibernate中,对象具有三种状态:transientpersistentdetached

1.Persistent对象:

Hibernatesession有关联的对象是persistent对象。对这种对象进行的所有修改都会按照事先设定的刷新策略,反映到数据库之中,也即,可以在对象的任何一个属性发生改变时自动刷新,也可以通过调用Session.flush()方法显式地进行刷新。

 

2.Detached对象

如果一个对象原来同Session有关联关系,但当下却没有关联关系了,这样的对象就是detached的对象。你可以通过调用任意一个sessionupdate()或者saveOrUpdate()方法,重新将该detached对象同相应的seesion建立关联关系。

 

3.Transient对象

新建的持久化类的实例,它还从未同Hibernate的任何Session有过关联关系。同样的,你可以调用persist()或者save()方法,将transient对象变成persistent对象。

 

Session对数据库操作(增删改查)方法

Query方法:

 

 

get()

从数据库获取数据对象,不存在时返回null 

首先查询session缓存,没有的话查询二级缓存,最后查询数据库并返回一个完全初始化好的对象,而这个过程有可能会涉及到多个数据库调用

load()  

从数据库获取数据对象,不存在时抛出异常

首先查询session缓存,没有就创建代理,实际使用数据时才查询二级缓存和数据库

createQuery()  

根据条件查询数据对象 从数据库获取数据对象,不存在时抛出异常

 

 

Criteria方法:

新增对象

save()方法

产生一个新的ID,为该ID持久化实例对象并执行INSET操作将对象保存到数据库,并返回一个Serializable对象。

persis()t方法

transient实例持久化,但persist不保证ID值立即赋给持久化实例,可能会在flush的时候给ID赋值,INSERT并一定立即执行,并返回一个void对象。

saveOrUpdate()

能根据对象是否已存在,而执行插入或更新。

修改对象

Update()方法

如果数据库里面存在你要修改的记录,update每次是直接对数据库执行修改语句

Merge()方法

merge是先在缓存中查找,缓存中没有相应数据,就到数据库去查询,然后再合并数据,如果数据是一样的,那么merge方法不会去做修改,如果数据有不一样的地方,merge才真正修改数据库。

删除对象

delete()方法

 

 

分页方法:

Query q = sess.createQuery("from DomesticCat cat");

q.setFirstResult(20);

q.setMaxResults(10);

List cats = q.list();

 

 

posted @ 2016-05-12 15:53  寐语者  阅读(193)  评论(0编辑  收藏  举报