Hibernate框架
来源:互联网 发布:新建视图 sql语句 编辑:程序博客网 时间:2024/06/11 14:47
一、 概述
ORM :Object Relation Mapping 对象关系映射。
Hibernate:开放源代码的ORM框架,对JDBC进行了轻量级的对象封装。
Crud :增删改Create、Retrieve、Update、Delete
主要被用在描述软件系统中数据库或者持久层的基本操作功能。
Session :是应用程序与数据库之间交互操作的一个单线程对象,是 Hibernate 运作的中心,它的主要功能是为持久化对象提供创建、读取和删除的能力,所有持久化对象必须在session的管理下才可以进行持久化操作。Session接口负责执行被持久化对象的crud操作,线程不安全。
OID:Object identifier, OID对象标识符,OID字段即主键
JTA:即Java Transaction API,JTA允许应用程序执行分布式事务处理——在两个或多个网络计算机资源上访问并且更新数据。一个分布式事务(distributedtransaction)包括一个事务管理器(transaction manager)和一个或多个资源管理器(resource manager)。
QBC:Query By Criteria
JPA:Java Persistence API。是SUN公司推出的一套基于ORM的规范。hibernate框架中提供了JPA的实现。JPA通过JDK 5.0注解或XML描述对象-关系表的映射关系,并将运行期的实体对象持久化到数据库中。
二、
1、在使用Hibernate时,首先要创建Configuration实例,Configuration实例主要用于启动、加载、管理hibernate的配置文件信息。
2、SessionFactory接口负责Hibernate的初始化和建立Session对象。它在Hibernate中起到一个缓冲区作用,Hibernate可以将自动生成的SQL语句、映射数据以及某些可重复利用的的数据放在这个缓冲区中。线程安全。
3、SessionFactory内置了一个连接池,hibernate.connection.provider_class
三、get和load的区别
1、查询的时机不一样
get方法任何时候都是立即加载,即只要一调用get马上发起数据库查询
load方法默认情况下是延迟加载,即真正用到对象的非OID字段数据才发起查询
load方法可以通过配置的方式改为立即加载。
配置的方式:
由于load方法是hibernate的方法所以只有XML的方式:
<classname="Customer" table="cst_customer"lazy="false">
2、返回的结果不一样
get方法永远返回查询的实体类对象。
load方法当是延迟加载时,返回的是实体类的代理对象。
四、Hibernate的一级缓存
就是指Session缓存,Session缓存是一块内存空间,用来存放相互管理的java对象,在使用Hibernate查询对象的时候,首先会使用对象属性的OID值在Hibernate的一级缓存中进行查找,如果找到匹配OID值的对象,就直接将该对象从一级缓存中取出使用,不会再查询数据库;如果没有找到相同OID值的对象,则会去数据库中查找相应数据。当从数据库中查询到所需数据时,该数据信息也会放置到一级缓存中。Hibernate的一级缓存的作用就是减少对数据库的访问次数。
Hibernate 向一级缓存放入数据时,同时复制一份数据放入到Hibernate快照中,当使用commit()方法提交事务时,同时会清理Session的一级缓存,这时会使用OID判断一级缓存中的对象和快照中的对象是否一致,如果两个对象中的属性发生变化,则执行update语句,将缓存的内容同步到数据库,并更新快照;如果一致,则不执行update语句。
Hibernate快照的作用就是确保一级缓存中的数据和数据库中的数据一致。
五、对象的三种状态
1、 瞬时态(transient)
不存在持久化标识OID(相当于主键值),尚未与Hibernate Session关联
2、 持久态(persistent)
存在持久化标识OID ,加入到了Session缓存中,并且相关联的Session没有关闭,在数据库中有对应的记录
3、 脱管态(detached)
脱管态对象存在持久化标识OID,并且仍然与数据库中的数据存在关联,只是失去了与当前Session的关联
六、
短语
含义
Restrictions.eq
等于=
Restrictions.allEq
使用Map,使用key/value进行多个等于的判断
Restrictions.gt
大于>
Restrictions.ge
大于等于>=
Restrictions.lt
小于<
Restrictions.le
小于等于<=
Restrictions.between
对应sql的between子句
Restrictions.like
对应sql的like子句
Restrictions.in
对应sql的in子句
Restrictions.and
and 关系
Restrictions.or
or关系
Restrictions.sqlRestriction
Sql限定查询
Restrictions.asc()
根据传入的字段进行升序排序
Restrictions.desc()
根据传入的字段进行降序排序
运算类型
HQL运算符
QBC运算方法
比较运算
=
Restrictions.eq()
<>
Restrictions.not(Restrictions.eq())
>=
Restrictions.ge()
<
Restrictions.lt()
<=
Restrictions.le()
is null
Restrictions.isNull()
is not null
Restrictions.isNotNull()
范围运算符
in
Restrictions.in()
not in
Restrictions.not(Restrictions.in())
between
Restrictions.between()
not between
Restrictions.not(Restrictions.between())
HQL运算符QBC运算方法
likeRestrictions.like()
andRestrictions.and()|
Restrictions.conjunction()
or
Restrictions.or()|
Restrictions.disjunction()
not
Restrictions.not()
- Hibernate框架
- Hibernate框架
- Hibernate框架
- hibernate 框架
- hibernate框架
- hibernate框架
- Hibernate框架
- Hibernate框架
- Hibernate框架
- Hibernate框架
- Hibernate框架
- hibernate框架
- hibernate框架
- hibernate 框架
- Hibernate框架
- Hibernate框架
- Hibernate框架
- Hibernate框架
- HDU1166
- Java必知必会及规范
- Java 关于对象之间的比较 , 容器中的数据的排序
- 滑动窗口的最大值-LintCode
- ckeditor实现照片上传功能
- Hibernate框架
- 垂直居中的方式
- 关于Mybatis框架的个人总结
- javascript获取文本框内的内容
- 9-23 数据库内容学习
- Java输入输出
- 双链表基本操作 doubly linked list
- Python LSB图片隐写技术
- 元组