1. hibernate初步

    1.概述

    ①hibernate是java应用和关系数据库之间的桥梁,是一个开源的对象关系映射框架,可用来把对象模型表示的java对象

    映射到关系型数据库表中去。

    ②hibernate不仅管理java对象到数据库的映射,还提供数据查询和获取数据的方法,极大的减少了开发时人工使用SQL和JDBC

    处理数据的时间。

    2.hibernate优势

    ①Hibernate是JDBC的轻量级的对象封装,封装了通过JDBC访问数据库的操作

    ②Hibernate是一个与JDBC密切关联的框架,多所以Hibernate的兼容性和JDBC驱动、数据库都有一定的关系,但是与使用

    它的java应用程序和APP Server没有任何关系,也不存在兼容性的问题。

    ③由于是对JDBC轻量级的封装,内存消耗少,拥有最快的运行效率

    ④开发效率高,eclipse、JBuilder等主流java集成开发环境对Hibernate有很好的支持。

    ⑤拥有分布式、安全检查呢、集群、负载均衡的支持

    ⑥具有可扩展性

    3.方法:

    save():对象的持久化操作

    saveOrUpdate():若一个对象已经持久化了再次调用save()方法会出现异常,可以使用saveOrUpdate(),它会自动判断该对象是否已经持久化了,是则执行对象更新操作,否则执行添加操作,若主键的生成策略是自增型的,这两种方法是一样的

    get():加载数据,即通过标识符找到指定类的持久化对象,若指定的记录不存在则返回null,导致空指针异常,而 get 不支持延迟加载策略

    load():也是加载数据,但是若指定的记录不存在会抛出ObjectNotFoundException异常,这就要求记录必须存在。,load 方法支持延迟加载策略。

    find():获得的List集合中的对象状态处于持久化态

    update():更新操作

    lock():

    flush方法:使数据表中的记录和Session缓存中的对象的状态保持一致,为保持一致,则可能会发送对应的SQL语句

    reflush():获取数据表中最新的记录,该方法会强制执行查询

    claer():清理缓存

    4.基于注解Annotation

    @entity表示当前类为实体类,需要进行持久化,将一个JavaBean声明为持久化类时,默认情况下,该类的所有属性都将映射到数据库的字段

    如果在该类中添加了无需映射的属性,则可以使用@Transient注解声明

    @table实现数据表和持久化类之间的映射,catalog指定数据库名,name指定表名,@Table注解位于@Entity之下

    @Id指定当前持久化类的ID表示属性,与@GeneratedValue配合使用

    @GeneratedValue指定ID表示生成器,与@Id配合使用

    @Column指定当前属性对应的数据库表中的字段,name指定字段名,unique指定是否唯一,nullable指定是否可为null

    5.Configuration类

    (1).Configuration类负责管理Hibernate的配置信息,包括如下:

    ①Hibernate运行的底层信息:数据库的URL、用户名、密码、JDBC驱动类、数据库Dialect、数据库连接池等(对应hibernate.cfg.xml文件)

    ②持久化类数据表的映射关系(*.hbm.xml)

    (2).创建Configuration对象的两种方法

    ①属性文件(hibernate.properties):Configuration cfg = new Configuration();

    ②xml文件(hibernate.cfg.xml):Configuration cfg = new Configuration().configure();

    ③Configuration的configure()方法还支持带参数的访问:

    File file = new File(“simpleit.xml”);

    Configuration cfg = new Configuration().configure(file);

    6.SessionFactory接口

    ①针对单个数据库映射关系经过编译之后的镜像,是线程安全的

    ②SessionFactory对象一旦构造完毕,即被赋予特定的配置信息

    ③SessionFactory是生成Session的工厂

    ④构造SessionFactory很消耗资源,一般情况下一个应用中只初始化一个SessionFactory对象

    ⑤Hibernate4 新增了一个 ServiceRegistry 接口,所有基于 Hibernate 的配置或者服务都必须统一向这个 ServiceRegistry 注册后才能生效

    ⑥Hibernate4 中创建 SessionFactory 的步骤

    7.Session概述

    ①Session 接口是 Hibernate 向应用程序提供的操纵数据库的最主要的接口, 它提供了基本的保存, 更新, 删除和加载 Java 对象的方法.

    Session 具有一个缓存, 位于缓存中的对象称为持久化对象, 它和数据库中的相关记录对应. Session 能够在某些时间点,

    按照缓存中对象的变化来执行相关的 SQL 语句, 来同步更新数据库, 这一过程被称为刷新缓存(flush)

    ②Session 是应用程序与数据库之间交互操作的一个单线程对象,是 Hibernate 运作的中心,所有持久化对象必须在

    session 的管理下才可以进行持久化操作。此对象的生命周期很短。Session 对象有一个一级缓存,显式执行 flush 之前,

    所有的持久层操作的数据都缓存在 session 对象处。相当于 JDBC 中的 Connection。

    ③持久化类与 Session 关联起来后就具有了持久化的能力。

    ④session缓存(Hibernate一级缓存):在 Session 接口的实现中包含一系列的 Java 集合, 这些 Java 集合构成了 Session 缓存。

    只要 Session 实例没有结束生命周期, 且没有清理缓存,则存放在它缓存中的对象也不会结束生命周期Session 缓存

    可减少 Hibernate 应用程序访问数据库的频率。

    commit() 和 flush() 方法的区别:flush 执行一系列 sql 语句,但不提交事务;commit 方法先调用flush() 方法,然后提交事务。

    意味着提交事务意味着对数据库操作永久保存下来。

    ⑤操作Session缓存的方法:

    flush():当调用这个方法时,会强制使数据库中的记录跟缓存中对象的状态保持一致

    reflush():获取数据表中最新的记录,会强制发送查询语句

    注意:即最新是记录,若打印的不是最新的则是MYSQL数据库的隔离级别问题,

    MYSQL默认的隔离级别为REPEATABLE READ(可重复读),需要改成

    在Hibernate的配置文件中,可以显示的设置隔离级别,每一个隔离级别都对应一个数字

    1对应READ UNCOMMITED

    2对应READ COMMITED

    4对应REPEATABLE READ

    8对应SERIALIZEABLE

    Hibernate通过Hibernate映射文件指定,Hibernate.connection.isolation属性设置事务的隔离级别

    clear():

    ⑥session 类的方法:

    取得持久化对象的方法: get() load()

    持久化对象都得保存,更新和删除:save(),update(),saveOrUpdate(),delete()

    开启事务: beginTransaction().

    管理 Session 的方法:isOpen(),flush(), clear(), evict(), close()等

    8.获取session的几种方法

    (1)Hibernate4.0之前:
①Configuration configuration = new Configuration().configure();
②SessionFactory sessionFactory = configuration.buildSessionFactory();
③Session session = sessionFactory.openSession();
(2)Hibernate4.0之后:
①Configuration configuration = new Configuration().configure();
②ServiceRegistry serviceRegistry = new ServiceRegistryBuilder().
applySettings(configuration.getProperties()).
buildServiceRegistry();
③SessionFactory sessionFactory = configuration.buildSessionFactory(serviceRegistry);
④Session session = sessionFactory.openSession();
(3)自定义SessionFactory类
9.  8.Hibernate对象的状态的转换和方法
(1)①瞬时态(Transient)
②持久态(Persistent)
③托管态(Detached)
瞬时态——>持久态:save()、saveOrUpload()
持久态——>瞬时态:delete()
持久态——>托管态:close()、clear()、evict()
托管态——>持久态:update()、saveOrUpdate()、lock()
处于持久态的对象也称为:PO(Persistent Object)
处于瞬时态和托管态的对象也称为VO(Value Object)
(2)站在持久化的角度, Hibernate 把对象分为 4 种状态:
临时对象(Transient):在使用代理主键的情况下,OID通常为null,不处于Session的缓存中,在数据库中没有对应的记录
持久化对象(也叫托管)(Persist):OID不为null,位于Session缓存中,若在数据库中已经有和其对应的记录,
持久化对象和数据库中相关记录对应,Session在flush缓存时,会根据持久化对象的属性变化,来同步更新数据库,在同一个
Session实例的缓存中,数据库表中的每条记录只对应唯一的持久化对象
游离状态(也叫”脱管”)(Detached):OID 不为 null,不再处于 Session 缓存中,一般情况需下, 游离对象是由持久化对象转变过来的, 因此在数据库中可能还存在与它对应的记录
删除状态(Removed):在数据库中没有和其 OID 对应的记录,不再处于 Session 缓存中,一般情况下, 应用程序不该再使用被删除的对象 Session 的特定方法能使对象从一个状态转换到另一个状态

Hibernate(1)基本知识的更多相关文章

  1. 记录Hibernate的缓存知识

    一.Hibernate缓存的作用 Hibernate是一个持久层框架,Hibernate要经常访问物理数据库.为了降低应用程序对物理数据源访问的频次,从而提高应用程序的运行性能,Hibernate的缓 ...

  2. hibernate[版本四]知识总结

    1.hibernate是orm对象关系映射,是对jdbc的封装 2.hibernate版helloworld 2.1导入jar <dependencies> <dependency& ...

  3. Hibernate 框架基本知识

    QTP:Quick Test Pressional 1,Hibernate是一个优秀的java持久化层解决方案,是当今主流的对象-关系映射(ORM,ObjectRelationalMapping)工具 ...

  4. 关于Hibernate的部分知识总结

    [部分内容参考地址:https://www.cnblogs.com/woniu2219/p/7111857.html] Hibernate Hibernate是一个开放源代码的对象关系映射框架,它对J ...

  5. hibernate 学习知识总结

    1.最近用hibernate 学会很多知识,总结如下: (1)数据库表格已经设置默认值,在进行数据插入的时候,bean里面不赋值的话,插入之后该字段依旧是null 是因为hibernate默认插入和更 ...

  6. HIBERNATE知识复习记录1-连接及常用方法

    要去面试了,复习一下HIBERNATE的相关知识吧,原来边看视频边写的代码如下,已经分不清先后次序了,大致看一看吧. 先看下总的配置文件hibernate.cfg.xml: <?xml vers ...

  7. 【Hibernate那点事儿】—— Hibernate知识总结

    前言: 上一篇简单的讲解了下Hibernate的基础知识.这里对Hibernate比较重要的一些知识点,进行总结和归纳. 手码不易,转载请注明!——xingoo 总结的知识点: 1 关于hiberna ...

  8. Hibernate框架(未完待续······)

        作为SSH三大框架之一的Hibernate,是用来把程序的Dao层和数据库打交道用的,它封装了JDBC的步骤,是我们对数据库的操作更加简单,更加快捷.利用Hibernate框架我们就可以不再编 ...

  9. Hibernate学习笔记

    一.Hibernate基础 1.Hibernate简介 Hibernate是一种对象关系映射(ORM)框架,是实现持久化存储的一种解决方案.Java包括Java类到数据库表的映射和数据查询及获取的方法 ...

随机推荐

  1. selenium相关:通过location 和 size 获取元素所在像素位置和尺寸,截取图片ROI

    1.实验 #https://captcha.luosimao.com/demo/ chrome default: location 不滚动,直接返回相对整个html的坐标 {'x': 15.0, 'y ...

  2. 学习之"setjmp和longjmp函数"

    Linux学习之"setjmp和longjmp函数"   转贴,原文地址:http://www.cnblogs.com/lq0729/archive/2011/10/23/2222 ...

  3. C语言之冒泡排序、选择排序、折半查询、进制查表

    菜单导航 1.冒泡排序 2.选择排序 3.折半查询 4.进制查表(十进制转二进制.八进制.十六进制) 一.冒泡排序 //1.冒泡排序 /** 一组无序数字,进行从小到大排序 冒泡排序的过程:就是每个循 ...

  4. 【Android】ImageView ScaleType属性值

    ImageView.ScaleType / android:scaleType值的意义区别: CENTER /center 按图片的原来size居中显示,当图片长/宽超过View的长/宽,则截取图片的 ...

  5. 关于SQL Server中的系统表之一 sysobjects

    微软Sql Server数据库是企业开发管理中最常用的数据库系统之一.其功能强大而且使用简单.方便.我们在数据库中创建数据库.表.视图.触发器.存储过程.函数等信息. 最常用的功能之一,查询数据,例如 ...

  6. net core体系-1概要

    .net core最近园子讨论频率很高的话题,从不久前发布正式版本后,也是开始从netcore官网一步一步走向学习之路:.net跨平台的设计让人很是兴奋起来,因为做了多年的互联网研发者,见识了很多一流 ...

  7. hbase0.94.11版本和hbase1.4.9版本的benchamark区别

    1.起初使用ycsb对hbase进行benchmark,分别在100%写的情况下检测写性能:在100%读的情况下检测读的性能.实验数据如下: 2.新版本的habse写性能竟然不如老版本.!!!.于是我 ...

  8. 51nod1967 路径定向 Fleury

    题目传送门 题解 几乎是Fleury模板题. 一开始我们把图看作无向图,然后对于度为奇数的点增边,使得整个图的所有点都是偶数的. 然后跑一遍欧拉回路 Fleury ,所有的边就定向好了~ 代码 #in ...

  9. sql 将一列一逗号分隔拼成字符串

    select stuff((select ','+w.Waybillno from Web_Way_Waybill w where w.IsValid<>'Y' AND w.TruckOr ...

  10. day 35 协程与gil概念

    博客链接: http://www.cnblogs.com/linhaifeng/articles/7429894.html 今日概要: 1 生产者消费者模型(补充) 2 GIL(进程与线程的应用场景) ...