标签:
Hibernate简介
1.Hibernate是对JDBC进一步封装:
原来没有使用Hiberante做持久层开发时,存在很多冗余,如:各种JDBC语句,connection的管理,所以出现了Hibernate把JDBC封装了一下,我们不用操作数据,直接操作它就行了。
2.分层的角度:
非常典型的三层架构:表示层,业务层,还有持久层。Hiberante也是持久层的框架,而且持久层的框架还有很多,比如:IBatis,Nhibernate,JDO,OJB,EJB等等。
3.Hibernate是一个ORM(对象关系映射)框架。
ORM,即Object-Relational Mapping,它的作用就是在关系型数据库和对象之间做了一个映射。从对象(Object)映射到关系(Relation),再从关系映射到对象。这样,我们在操作数据库的时候,不需要再去和复杂SQL打交道,只要像操作对象一样操作它就可以了(把关系数据库的字段在内存中映射成对象的属性)。
4.提供了缓存功能:一级缓存,二级缓存
Hibernate简介整体流程
1:通过configuration来读cfg.xml文件
2:得到SessionFactory 工厂
3:通过SessionFactory 工厂来创建Session实例
4:通过Session打开事务
5:通过session的api操作数据库
6:事务提交
7:关闭连接
Hibernate中对象状态
在Hibernate中,对象具有三种状态:transient、persistent和detached。
1.Persistent对象:
同Hibernate的session有关联的对象是persistent对象。对这种对象进行的所有修改都会按照事先设定的刷新策略,反映到数据库之中,也即,可以在对象的任何一个属性发生改变时自动刷新,也可以通过调用Session.flush()方法显式地进行刷新。
2.Detached对象
如果一个对象原来同Session有关联关系,但当下却没有关联关系了,这样的对象就是detached的对象。你可以通过调用任意一个session的update()或者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();
标签:
原文地址:http://www.cnblogs.com/piwenjun/p/5485990.html