• 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并不在它的缓存中,因此它是处于游离状态的。

  • 相关阅读:
    python的argparse模块
    Robotframework之SSHLibrary库
    Python 中的 getopt 模块
    Python list 列表
    Samba windows 10 share: mount error(112): Host is down
    安装两个版本的python安装包,后安装的python程序打开时闪退
    NetScaler VPX configration
    drupal smtp could not connect to smtp
    drupal7 判断用户是否具有某个权限
    微信支付报错:time_expire时间过短,刷卡至少1分钟,其他5分钟]
  • 原文地址:https://www.cnblogs.com/jingyunyb/p/3824196.html
Copyright © 2020-2023  润新知