zoukankan      html  css  js  c++  java
  • Hibernate的Session的理解

    Hibernate中的Session是一级缓存,可以理解为进程级(是线程吧)的缓存,在进程(是线程吧)运行期间一直存在。

    session可以理解为一个可以操作数据库的对象,该对象中有操作数据库的方法。

    在Java里面,缓存通常是指Java对象的属性占用的内存空间,通常是一些集合类型的属性。在Session接口的实现类SessionImpl中定义了一系列的Java集合,这些Java集合就构成了Session的缓存。

    总的来说(我对Session的理解):Session是Hibernate和DB的中间人(一个对象),Session中有两块东西或者说是功能

    (1)操作数据库的方法

    (2)Session中有一些属性(集合之类的东西),通过这些属性来存储要发送给DB的sql语言、缓存从DB中已经查出来的数据等

    单独的Hibernate程序操作数据库的流程:

    1、获取Session

    2、打开事务

    3、操作数据库

    4、提交(回滚)事务

    5、关闭Session

    这样就完成了操作数据库

    注一:Hibernate在操作数据库前需要得到Session的实例,这类似于JDBC中的connection

    获取session的方法如下:

    Session session = sessionFactory.openSession();

    通过Session对象可以对数据库进行增删改查的操作,对应的方法分别为:

    save(),delete(),update(),savaOrUpdate(),load(),get(),在Hibernate3中取消了find()方法,必须通过Query或Criteria来进行查询。

    注二:openSession()和getCurrentSession()方法的区别之一

    openSession()需要自己关闭session

    getCurrentSession()不需要自己关闭session,提交(回滚)事务的时候自动关闭session

    Hibernate中Java对象的状态

    使用缓存的一个明显的好处就是可以减少数据库访问的频率,提高应用程序的性能,因为从内存中读取数据显然要比从数据库中查询快的多。

    鉴于此Hibernate中设计出了Java对象的三种状态。

    1、临时状态(Transient)。处于该状态的对象还没有被纳入Hibernate的缓存管理体系,跟任何Session都不关联,在数据库中没有对应的记录。

    2、持久化对象(Persistent)。处于这个状态的对象位于Session的缓存中,并且和数据库中的一条数据记录想对应。

    3、游离状态(Detached)。处于这个状态的对象不再位于Session的缓存中,它与临时对象的最大区别在于,游离对象在数据库中还可能存在一条与它对应的记录。

      上述3个状态是可以相互转化的,而且我们所说的状态都是针对某一个Session的实例而言的,比方说,对象A对于session1而言是处于持久化状态的,因为它处于session1的缓存中,但是对于session2而言对象A并不在它的缓存中,因此它是处于游离状态的。

  • 相关阅读:
    JS复制内容到剪切板
    mysql root密码的重设方法(转)
    php生成excel文件示例代码(转)
    php读取文件内容的三种方式(转)
    使用火蜘蛛采集器Firespider采集天猫商品数据并上传到微店
    Mac Android8.0源码编译笔记
    开源 高性能 高可用 可扩展
    开源 模式
    开源 算法 数据结构
    mdb
  • 原文地址:https://www.cnblogs.com/jingyunyb/p/3824196.html
Copyright © 2011-2022 走看看