• hibernate入门


    A hibernate的几个基本类

    hibernate是一个用于java访问数据的框架,它实现了将这一操作对象化的目标。

    hibernate底层依然使用的是jdbc对数据库进行操作。

    在具体操作中,有几个比较重要的类:

    Configuration,SessionFactory,Session

    参考下面代码

        
           Configuration cfg = new Configuration();
            SessionFactory sf = cfg.configure().buildSessionFactory();
             
           Session session = sf.openSession();
            session.beginTransaction();
           Data s=new Data();//s是我们要保存的实例
           session.save(s);
           session.getTransaction().commit();

    Configuration对象读取默认的xml配置文件,然后生成一个SessionFactory对象

    注意,对于每个程序,Configuration和SessionFactory对象都只能有一个。

    而Session对象每个线程一个。

    B hibernate的三种状态

    临时状态:由java的new命令开辟内存空间的java对象也就是普通的java对象,如果没有变量引用它它将会被JVM收回。临时对象在内存中是孤立存在的,它的意义是携带信息载体,不和数据库中的数据由任何的关联。通过Session的save()方法和saveOrUpdate()方法可以把一个临时对象和数据库相关联,并把临时对象携带的信息通过配置文件所做的映射插入数据库中,这个临时对象就成为持久化对象。

    持久化状态:持久化对象在数据库中有相应的记录,持久化对象可以是刚被保存的,或者刚被加载的,但都是在相关联的session声明周期中保存这个状态。如果是直接数据库查询所返回的数据对象,则这些对象和数据库中的字段相关联,具有相同的id,它们马上变成持久化对象。如果一个临时对象被持久化对象引用,也立马变为持久化对象。

    如果使用delete()方法,持久化对象变为临时对象,并且删除数据库中相应的记录,这个对象不再与数据库有任何的联系。

    持久化对象总是与Session和Transaction关联在一起,在一个session中,对持久化对象的操作不会立即写到数据库,只有当Transaction(事务)结束时,才真正的对数据库更新,从而完成持久化对象和数据库的同步。在同步之前的持久化对象成为脏对象。

    当一个session()执行close()、clear()、或evict()之后,持久化对象就变为离线对象,这时对象的id虽然拥有数据库的识别值,但已经不在Hibernate持久层的管理下,他和临时对象基本上一样的,只不过比临时对象多了数据库标识id。没有任何变量引用时,jvm将其回收。

    脱管状态:Session关闭之后,与此Session关联的持久化对象就变成为脱管对象,可以继续对这个对象进行修改,如果脱管对象被重新关联到某个新的Session上,会在此转成持久对象。

    脱管对象虽然拥有用户的标识id,所以通过update()、saveOrUpdate()等方法,再次与持久层关联。

    在上面的那个例子中,对象c在刚诞生时是临时状态,对其进行save后是持久化状态,Session关闭后是托管状态。

    并且,Session.save(c)只是将c存到一个缓存中去,只有commit之后,才会将其修改数据库。

  • 相关阅读:
    linux(centos6.9) 安装mongoDB
    vue $refs
    vue $emit的使用方式
    docker上部署一个项目常用命令
    Nginx之Location匹配规则
    Github Packages和Github Actions实践之CI/CD
    消息中间件选型分析:从 Kafka 与 RabbitMQ 的对比看全局
    发布Jar包到maven中央仓库
    一些小Tip
    有风格的程序员,写有风格的代码
  • 原文地址:https://www.cnblogs.com/elnino/p/5820922.html
Copyright © 2020-2023  润新知