一 Configuration接口

  Configuration对象只存在于系统的初始化阶段。配置相关。

  配置文件可以使用默认的路径,也可以指定路径。

  Configuration config = new Configuration().configure()  

  SessionFactory sessionfactory = Config.buildSessionFactory()

  也可以使用new Configuration().setProperty()的方式动态配置属性

二 SessionFactory接口

  通常一个应用程序只有一个SessionFactory实例,主要用来生成session对象。

  但是,当项目中要操作多个数据库时,则必须为每一个DB指定一个SessionFactory。

  Hibernate中sessionFactory相当于一个缓冲区,hibernate自动生成的SQL,映射数据,数据库配置,以及某些可重复利用的数据可以存放在换出去中,这是hibernate的二级缓存。

  SessionFactory是线程安全的,他的一个实例可以多个线程共享。   

  OpenSession():  调用时创建一个新的,用完后,要手动关闭,使用Close

  GetCurrentSession(): 创建一个实例,并绑定到当前线程,在提交或失败回滚后自动关闭。

OpenSession用的比较少,一般都使用GetCurrentSession();

                                  必须在hibernate.cfg.xml中配置事务。

                  <session-factory>
                   <!-- Put other elements here -->
                   <property name="hibernate.current_session_context_class">thread/JTA</property>
               </session-factory>
JDBC事务和JATA事务的区别
    JDBC的一切行为包括事务是基于一个Connection的,在JDBC中是通过Connection对象进行事务管理。在JDBC中,常用的和事务相关的方法是:
setAutoCommit、commit、rollback等。JDBC为使用Java进行数据库的事务操作提供了最基本的支持。通过JDBC事务,我们可以将多个SQL语句放到同一个事务中,
保证其ACID特性。JDBC事务的主要优点就是API比较简单,可以实现最基本的事务操作,性能也相对较好。但是,JDBC事务有一个局限:
一个 JDBC 事务不能跨越多个数据库!!!所以,如果涉及到多数据库的操作或者分布式场景,JDBC事务就无能为力了。
JTA:分布式事务

三 Session接口

  session对象的生命周期以Transaction对象的事务开始和结束为边界。

  对象的三个状态:(1)瞬时态; (2)持久态; (3)游离态;

  save() : 将对象加入缓存; 生成唯一标识; 生成insert语句

  update(): 将对象加入缓存; 生成update语句;

  saveOrUpdate():

  delete():

  get(): 先从一级缓存查,如果没有则越过二级缓存,查DB; 无论Class元素的lazy属性是什么,都直接返回实体类;  不存在时返回NULL; 不延迟加载

  load(): 先一级缓存,再二级缓存;当Class元素的lazy属性是false时,会返回持久化对象的代理类实例;  不存在返回异常; 延迟加载

  contains():

  evict() :  清空缓存;

  clear() :清空缓存

  createQuery(): HQL

  createCriteria():

  createSQLQuery( ):SQL

  createFilter()          

四 Transaction接口

  管理事务的接口;

  事务:为了避免数据不完整,不一致;

  事务的ACID:原子性, 一致性,持久性,隔离性(可串行性)。

  不完全的事务隔离会导致如下问题:

          更新丢失:

           脏数据:

           不可重复读:

           幻读:

  隔离级别:  

      读操作未提交:可以读取事务的中间状态(读取未提交的数据), 脏读,不可重复读,幻读

           读操作已提交:不能读取未提交的事务;   不会脏读, 但是可以不可重复读,幻读;

            可重读:保证能读取相同的数据不会丢失,不会脏读,不会不可重复读;但是会幻读;

       可串行化:最严格;

   hibernate可以对事务进行配置:本地事务  或者  全局事务;  还可以对隔离级别进行设置(8-串行化; 4-可重复读;2-读已提交; 1:读未提交);

  常用方法

    commit():

    rollback(): 

五 Query接口

  HQL ,  QBC, SQL 三种查询的方式;

   HQL: 不是引用表名和字段名,而是引用类名和属性名。

   setter():设置HQL中的参数;参数有两种表示:     一是用名称:  是  “:参数名”(这种方式更容易阅读);  二是用:?

    list(): 将所有结果集中的数据转换为java对象,占很大空间,浪费;

    iterator():  把使用到的数据才转成java对象;但是必须顺序读取。

    uniqueResult() : 返回唯一的结果;

   executeUpdate() :

    setFirstResult()

   setMaxResult() :

   实体查询:  String    hql = "from Users as U";

属性查询:   “select name,age from User”

                          "slect new User(name, age) from User"

  HQL 聚集函数:

  HQL分组和排序:

  HQL子查询:

六 Criteria接口

  更加面向对象的查询方式

 

hibernate 学习 五 hibernate核心接口的更多相关文章

  1. Hibernate学习(五)Hibernate 多对多映射

    说到多对多关系,印象最深刻的就是大学的选修课.一个学生可以选修多门课程,一门课程可以有多个学生选修,学生所选的每一门课程还有成绩.这个场景的E-R图如下: 对于多对多的关系,我们通常会抽出一张中间表( ...

  2. hibernate学习五 Hibernate补充

    1  MiddleGenIDE可以生成映射类和映射文件. 2

  3. Hibernate学习之——Hibernate环境搭建

    之前在写关于安卓闹钟的教程,写了一半就没后一半了,其实自己也没做好,在校外实习,校内毕业实习又有任务,只能先放放了,等毕业实习结束之后,在继续安卓闹钟开发之旅,相信这个时间不会很久的.现在毕业实习用到 ...

  4. Hibernate学习0.Hibernate入门

    Hibernate是什么 面向java环境的对象/关系数据库映射工具. 1.开源的持久层框架. 2.ORM(Object/Relational Mapping)映射工具,建立面向对象的域模型和关系数据 ...

  5. hibernate学习之Hibernate API

    1. Hibernate Api分类 1)提供访问数据库的操作(如保存,更新,删除,查询)的接口.这些接口包括:Session, Transaction,,Query接口. 2)由于配置Hiberna ...

  6. Hibernate学习笔记-Hibernate HQL查询

    Session是持久层操作的基础,相当于JDBC中的Connection,通过Session会话来保存.更新.查找数据.session是Hibernate运作的中心,对象的生命周期.事务的管理.数据库 ...

  7. Hibernate学习之Hibernate流程

    Hibernate的核心组件 在基于MVC设计模式的JAVA WEB应用中,Hibernate可以作为模型层/数据访问层.它通过配置文件(hibernate.properties或hibernate. ...

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

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

  9. Hibernate的五个主要接口

    Hibernate作为持久成中间件,它的具体实现对与上层调用是透明的,即上层通过接口来调用Hibernate的具体实现,所以对于入门级别的讨论来说,自然应该先从接口开始了.

随机推荐

  1. Linux上mysql修改密码

    http://www.cnblogs.com/wangjiangze/archive/2011/03/03/1970105.html   MySQL中修改密码及访问限制设置详解

  2. ffmpeg h264编码 extradata 为空

    ffmpeg h264编码的例子前面的文章已经介绍,本来主要讲述影响AVCodecContext extradata是否为 空的配置项.如果要求open编码器以后AVCodecContext extr ...

  3. Selenium系列之--07 操作远程浏览器

    Selenium远程控制浏览,可以通过如下两种方式实现,本质上都是Selenium Grid a.  客户机启Selenium Standalone Server 作为远程服务,服务端通过调用Remo ...

  4. win7自带照片查看器

    win10如何找回自带的照片查看器   方法/步骤   1 首先,我们打开一个记事本,可以点击win+r打开运行框,然后在运行框中输入notepad.或者在桌面右键点击里面的新建,然后在新建中找到文本 ...

  5. Oracle中,将毫秒数转换为timestamp类型的两种方法

    在许多场景中,开发人员习惯用1970-01-01 00:00:00.000以来的毫秒数来表示具体的时间,这样可以将数据以NUMBER类型存储到数据库中,在某些时候方便比较,同样,有些时候我们需要 把这 ...

  6. ipa验证错误问题总结

    The following issues were found during validation.这个error的产生原因是因为代码中写的标示符或者方法名,与系统的命名空间冲突. 具体是哪个标示符或 ...

  7. [Phoenix] 八、动态列

    摘要: 传统关系型数据库的动态列实现只能依赖逻辑层的设计实现,而Phoenix是HBase上的SQL层,借助HBase特性实现的动态列功能,具有高度的灵活性,告别业务逻辑层的复杂设计. 一.概要 动态 ...

  8. RequestDispatcher用法

    1.具体用法: RequestDispatcher dispatcher = req.getRequestDispatcher("updateByUserId_001.jsp"); ...

  9. meteor---在合并打包多个文件ZIP下载的功能

    实现多个文件边打包边下载的功能,速度还可以,本人亲测,欢迎大家来指点archiver --用NPM安装这个模块---本人文件存储在file-collection 中,可以用fs : fs.create ...

  10. 【智能无线小车系列十】通过USB摄像头实现网络监控功能

    如果仅有静态图像可能还不足以满足我们的需求,我们可能会需要用到实时的监控功能.这里介绍一款小应用:motion.motion的功能可强大了,不仅可以将监控的画面通过视频传输,实时展现,更为强大的是,m ...