Hibernate中Session对象详解
来源:互联网 发布:魔兽世界对Win10优化 编辑:程序博客网 时间:2024/04/30 06:43
一、session对象概述
Session 接口是 Hibernate 向应用程序提供的操纵对数据库的最主要的接口, 它提供了基本的保存, 更新, 删除和加载Java 对象的方法.
二、理解session的缓存
1、在 Session 接口的实现中包含一系列的 Java 集合, 这些 Java 集合构成了 Session 缓存. 只要Session 实例没有结束生命周期, 存放在它缓存中的对象也不会结束生命周期
2、 session的save()方法持久化一个对象时,该对象被载入缓存,以后即使程序中不再引用该对象,只要缓存不清空,该对象仍然处于生命周期中。当试图load()对象时,会判断缓存中是否存在该对象,有则返回。没有在查询数据库
三、Session对象的得到方法
首先由Configuration对象实例化,然后读取调用其方法读取配置文件,当读取完毕后,调用buildSessionFactory()方法来构造出一个session对象的工厂对象。SessionFactory对象,SessionFactory对象调用opernSession()来得到一个session的对象。使用完session后记得要调用自身的close()方法来释放
四、Session对象的主要方法。
1、 可通过Session对象的get(),load(),save(),update(),delete()和saveOrUpdate()等方法对PO进行加载、保存、更新、删除、等操作
a) Get()方法 执行查询。只能用指定的持久化对象和指定的id查询
b) Load()方法 给session加载一个持久化的对象。使对象从瞬时转化为持久。
c) Update()方法 执行更新,更改成新的实体内容、
d) Delete方法 删除实体
e) SaveOrUpdate方法 如果传入的参数是临时对象,就调用save()方法,如果传入的参数是脱管状态,就调用update方法,如果传入的参数是持久化对象,那就直接返回。
2、 在查询的情况下,可通过Session生成一个Query或者Criteria对象,然后利用Query和Criteria对象执行查询操作,如果没有异常,事务会将这些提交到数据库中并执行操作
a) Query对象
面向对象的查询语言,与SQL不同,HQL中的对象名是区分大小写的(除了JAVA类和属性其他部分不区分大小写);HQL中查的是对象而不是和表,并且支持多态;HQL主要通过Query来操作,
Query q = session.createQuery(hql);
from Person
from User userwhere user.name=:name
from User userwhere user.name=:name and user.birthday < :birthday
b) Criteria对象
Criteria是一种比HQL更面向对象的查询方式;Criteria的创建方式:
Criteria crit =session.createCriteria(DomainClass.class);
简单属性条件如:criteria.add(Restrictions.eq(propertyName, value)),
criteria.add(Restrictions.eqProperty(propertyName,otherPropertyName))
五、清理session的缓存
l Session 具有一个缓存, 位于缓存中的对象称为持久化对象, 它和数据库中的相关记录对应. Session 能够在某些时间点, 按照缓存中对象的变化来执行相关的 SQL 语句, 来同步更新数据库, 这一过程被称为清理缓存(flush)
l 默认情况下 Session 在以下时间点清理缓存:
• 当应用程序调用 Transaction 的 commit()方法的时, 该方法先清理缓存(session.flush()),然后在向数据库提交事务(tx.commit())
• 当应用程序执行一些查询操作时,如果缓存中持久化对象的属性已经发生了变化,会先清理缓存,以保证查询结果能够反映持久化对象的最新状态
• 显式调用 Session 的 flush() 方法.
l 区别:
flush:进行清理缓存(此时缓存中的数据并不丢失)的操作,让缓存和数据库同步执行一些列sql语句,但不提交事务,;
commit:先调用flush() 方法,然后提交事务. 则意味着提交事务意味着对数据库操作永久保存下来。
reresh:刷新,让session和数据库同步,执行查询,把数据库的最新信息显示出来,更新本地缓存的对象状态.
clear:清空缓存,等价于list.removeAll();
- Hibernate中Session对象详解
- Hibernate中Session对象方法详解
- Hibernate详解(一)--session操作对象
- jsp中session对象详解
- Hibernate中no session 详解及解决办法
- JSP页面中Session对象详解
- JSP页面中Session对象详解
- JSP页面中Session对象详解
- JSP页面中Session对象详解
- HIbernate 创建Session 对象
- hibernate的session对象
- hibernate中的Session对象
- Hibernate 框架Session对象
- Hibernate中的Session对象
- Hibernate接口Session详解
- Hibernate的Session详解
- 详解Hibernate Session
- 详解Hibernate Session
- 程序员总结:帮助你早些明白一些道理
- Android的图片压缩类ThumbnailUtils
- Linux开机流程分析与Grub引导程序
- vtk + vs2005 环境配置
- 特定概率分布的随机数发生器
- Hibernate中Session对象详解
- 比较字符串
- c# 中添加数据到数据库中的三种方法 .
- Java线程:线程的同步问题
- 漏洞分析----非常给力的方法----虚拟机快照
- MySQL用变量的方法添加伪序号列,MySql自增序列,序号列
- 2011-12-13_<1>
- [转]Linux下makefile教程
- jsp问题