一、Configuration(AnnotationConfiguration)

作用:进行配置信息的管理

目标:用来产生SessionFactory

  可以在configure 方法中指定hibernate配置文件,默认(不指定)时在classpath(bin目录下)下加载hibernate.cfg.xml 文件

二、SessionFactory

作用:用于产生Session的工厂 (数据库连接池)

  当它产生一个Sesion时,会从数据库连接池取出一个连接,交给这个Session,

  可以通过这个Session取出这个连接(浅显的理解为:Session里面封装了Connection)

关注两个方法:

  getCurrentSession():表示当前环境没有Session时,则创建一个,否则不用创建

  openSession(): 表示创建一个Session(3.0以后不常用),使用后需要关闭这个Session

  两方法的区别:

  1.openSession永远是每次都打开一个新的Session,而getCurrentSession不是,

  是从 '上下文'找、只有当前没有Session时,才创建一个新的Session

  2.OpenSession需要手动close,getCurrentSession不需要手动close,事务提交自动close

  3.getCurrentSession界定事务边界

  上下文:所指的上下文是指hibernate配置文件(hibernate.cfg.xml)中的“current_session_context_class”所指的值:

  (可取值:jta|thread|managed|custom.Class)

  常用;①thread:是从当前线程找、只有当前线程没有Session时,才创建一个新的Session,主要从数据界定事务

        ②jta:主要从分布式界定事务,运行时需要Application Server来支持(Tomcat不支持)

三、Session

  1、管理一个数据库的任务单元

  2、save() Transient状态 经过save方法 变成  Persistent 状态

  3、delete() 被delete对象需要有Id  因为是通过Id去删除的  

  4、load()

  5、Get()

    load方法和get方法的区别:

      a)load 返回的是代理对象,延迟加载,等到真正使用对象的内容才发出sql语句,

      b)get 不会延迟加载,调用get方法,会直接发出sql语句

    另外:get() 和 load() 只根据主键查询,不能根据其他字段查询

  6、update()

    1.本意用来更新detached对象,更新完成后转为为persistent状态(默认更新全部字段)

    2.更新transient对象会报错(没有ID)

    3.更新自己设定ID的transient对象可以(默认更新全部字段)

    4.persistent状态的对象,只要设定字段不同的值,在session提交时,会自动更新(默认更新全部字段)

     5.更新部分更新的字段(更改了哪个字段就更新哪个字段的内容)(三种方法)

      a)update/updatable 属性

      b)dynamic-update属性

      c)使用HQL(EJBQL)面向对象的查询语言(建议)

      Query q = session.createQuery("update Student s set s.name='z5' where s.id = 1");

      q.executeUpdate();

  7、saveOrUpdate()

    在执行的时候hibernate会检查,如果对象在数据库中已经有对应的记录(是指主键),则会更新update,否则会添加数据save

  8、clear()

    清除session缓存

    无论是load还是get,都会首先查找缓存(一级缓存,也叫session级缓存),如果没有,才会去数据库查找

  9、flush()

    同步缓存和数据库中的数据,如果缓存中的数据和数据库中的不一致,则更新数据库中的数据

    在hibernate中也存在flush这个功能,在默认的情况下session.commit()之前时,其实执行了一个flush命令

  10、SchemaExport 设置是否打印,是否交由数据库执行

注:持久化对象的三种状态

一、瞬时对象(Transient Object)

  如:Teacher t = new Teacher();  t.setName("xzk1");

  只是在内存中有t对象,缓存中没有,而且这个t对象是没有ID值的(数据库中)

二、持久化对象(Persistent Object)

  如:Teacher t = new Teacher();  t.setName("xzk1");

    t.save()

  在内存中有t对象,并且经过save() 后,缓存中也有,ID经过注解添加后也有(数据库中)

三、离线对象(Detached Object)

  如:Teacher t = new Teacher();  t.setName("xzk1");

    t.save()

    session.getT****.commit();

  在持久化的基础上,提交事务,此时session关闭,

  所以内存中还有,但是在session缓存中没有了,数据库中仍然还有这个ID

注:缓存的概念:一个Transient对象在执行save方法时,session会在内存中开辟出一块缓存区,

  这块缓存区会存有一个Map集合,当save某个对象时,会把该对象的ID作为Key,该对象的引用作为value,

  当需要调用该对象时,会先从缓存中去查找,如果缓存中没有,再去问数据库要

  如:load 和 get 都会先问下缓存中有没有 对应的ID的 key

5.Hibernate 核心开发接口的更多相关文章

  1. Hibernate学习笔记2.5(Hibernate核心开发接口和三种状态)

    1.configuration(配置信息管理,产生sessionfactory) sessionfactory管理一系列的连接池 opensession 永远打开新的,需要手动close getcur ...

  2. Hibernate核心开发接口_SessionFactory详解

    SessionFactory: a)  用来产生和管理Session b)通常情况下每个应用只需要一个SessionFactory c)除非要访问多个数据库的情况 d) 关注两个方法即:  openS ...

  3. hibernate核心开发接口_Configuration

    AnnotationConfiguration继承自Configuration,这里以AnnotationConfiguration为例: new AnnotationConfiguration(). ...

  4. HIbernate学习笔记(二) hibernate对象的三种状态与核心开发接口

    1.在hibernate中持久化对象有三个状态,这个面试时可能会问到: (1)transient瞬时态:在数据库中没有与之匹配的数据,一般就是只new出了这个对象,并且在session缓存中也没有即此 ...

  5. Hibernate系列之核心开发接口

    一.概述 所有的hibernate应用中都会访问5个核心接口,它们分别是: Configuration:配置hibernate,创建SessionFactory对象 SessionFactory:初始 ...

  6. hibernate(五)核心开发接口与对象的三种状态

    本文链接:http://www.orlion.ml/37/ 一.Configuration 1.AnnotationConfiguration 2.进行配置信息的管理 3.configure()方法通 ...

  7. Hibernate 再接触 核心开发接口

    1.可以重载方法进行配置文件的指定 sessionFactory = new AnnotationConfiguration().configure("hibernate.xml" ...

  8. Hibernate详解(5)——Hibernate核心接口和工作原理

    Hibernate核心接口 Hibernate有五大核心接口,分别是:Session Transaction Query SessionFactoryConfiguration .这五个接口构成了Hi ...

  9. hibernate学习系列-----(2)hibernate核心接口和工作机制

    在上一篇文章hibernate学习系列-----(1)开发环境搭建中,大致总结了hibernate的开发环境的搭建步骤,今天,我们继续了解有关hibernate的知识,先说说这篇文章的主要内容吧: C ...

随机推荐

  1. Scala安装配置和使用

  2. hive数据类型1

  3. CORS,jsonp解决跨域问题

    同源和跨域 同源策略(Same origin policy)是一种约定,它是浏览器最核心也最基本的安全功能,如果缺少了同源策略,则浏览器的正常功能可能都会受到影响.可以说Web是构建在同源策略基础之上 ...

  4. java数据结构之LinkedHashMap

    一.LinkedHashMap源码注释 public class LinkedHashMap<K,V> extends HashMap<K,V> implements Map& ...

  5. 使用Visual Studio Code Coverage和nunit上传单元测试覆盖率和单元测试结果到SonarQube上

    SonarQube.Scanner.MSBuild.exe begin /k:"OMDCCQuotes" /d:sonar.host.url="http://myip:9 ...

  6. tf.metrics.sparse_average_precision_at_k 和 tf.metrics.precision_at_k的自己理解

    tensorflow最大的问题就是大家都讲算法,不讲解用法,API文档又全是英文的,看起来好吃力,理解又不到位.当然给数学博士看的话,就没问题的. 最近看了一系列非常不错的文章,做一下记录: http ...

  7. 【FFMPEG】各种音视频编解码学习详解 h264 ,mpeg4 ,aac 等所有音视频格式

    目录(?)[-] 编解码学习笔记二codec类型 编解码学习笔记三Mpeg系列Mpeg 1和Mpeg 2 编解码学习笔记四Mpeg系列Mpeg 4 编解码学习笔记五Mpeg系列AAC音频 编解码学习笔 ...

  8. SpringCloud学习(五)路由网关(zuul)(Finchley版本)

    在微服务架构中,需要几个基础的服务治理组件,包括服务注册与发现.服务消费.负载均衡.断路器.智能路由.配置管理等,由这几个基础组件相互协作,共同组建了一个简单的微服务系统.一个简单的微服务系统如下图: ...

  9. day36 joinablequeue、多线程理论、多线程的两种使用方式、守护线程、互斥锁、死锁、递归锁、信号量

    1.joinablequeue队列 joinablequeue与queue一样,也是一种队列,其继承自queue,也有queue中的put 与get 方法,但是在joinablequeue中有自己的 ...

  10. ROS topic,service和action的使用场景

    参考:ROS中关于topic和service的运用场合 Topics 特点: 1.单向,分工明确,处理连续数据流,topic是一种多对多的形式,一个Node可以订阅多个Topic,可以publish到 ...