• hibernate的核心类和接口
  1. Configuration类
    1. 作用:(1)读取hibernate.cfg.xml文件

      (2)管理对象关系映射文件<mapping resource="">

      (3)加载hibernate的驱动,例如:url,用户名

      (4)管理hibernate配置信息

  2. hibernate.cfg.xml
  3. 对象关系映射文件
  4. SessionFactory(会话工厂)接口
    1. 缓存sql语句和某些数据(称为Session级缓存)
    2. 在应用程序初始化的时候创建,是一个重量级类(耗内存),一般使用单例模式保证一个应用中只需要一个SessionFactory实例
    3. 在如果某个应用访问多个数据库,则要创建多个会话工厂实例,一般是一个数据库一个会话工厂实例。
    4. 通过SessionFactory接口可以获得Session(会话)实例。
    5. 示意代码如下:
       1 Configuration cf = new Configuration().configure();
      2 SessionFactory sf = cf.buildSessionFactory();
      3 Session s = sf.getCurrentSession();//或者是:Session s = sf.openSession();

      注意:这里有关sf.getCurrentSession()和sf.oopenSession()的区别:openSession()是每次可以获取一个全新的session;getCurrentSession()获取的是和当前线程绑定的session,即:在同一个线程中我们获取的session是同一个session,这样的话可以利于事务的控制。如果是使用getCurrentSessionn(),需要再hibernate.cfg.xml文件中配置如下:

       <!--配置可以使用getCurrentSession-->
      <property name="hibernate.current_session_context_class">thread</property>

      在使用过程中openSession()和getCurrentSession()的选择原则:①如果需要在同一个线程中,保证使用同一个Session时,则使用getCurrentSession();②如果在一个线程中,需要使用不同的Session,则使用openSession();

  5. openSession()和getCurrentSession区别:
    1. 采用getCurrentSession()创建的session会绑定到当前线程中,而采用openSession() 创建的session则不会
    2. 采用getCurrentSession()创建的session在commit或rollback时,会自动关闭,而采用openSession()创建的session必须手动关闭。
    3. 使用getCurrentSession()需要在hibernate.cfg.xml文件中加入如下配置:
       <!--如果使用的是本地事务(jdbc事务)配置可以使用getCurrentSession,-->
      <property name="hibernate.current_session_context_class">thread</property>
      <!-- 如果使用的是全局事务(jta事务)-->
      <properity name="hibernate.current_session_context_class">jta</properity>
  6. 如何查看session是否及时关闭
    1. windows:
      1. 在cmd命令中输入:netstat -an [oracle 1521/mysql 3306/sql server 1433]
    2. linux/unix:
      1. 在命令行中输入:netstat -an 或者top
  7. session接口的主要作用是:
    1. session一个实例代表与数据库的一次操作(一次操作可以使crud组合)
    2. session实例通过SessionFactory获取,用完及时关闭
    3. session是线程不同步的(不安全),因此要保证在同一线程中使用,可以用getCurrentSession()获取
    4. session可以看做是持久化管理器,它是与持久化操作相关的接口
  8. Session(会话)接口的几个重要方法:
    1. 保存一个对象(记录)——save方法
    2. 删除一个对象(记录)——delete方法
    3. 查询一个对象(记录)——get/load方法
      1. get()和load()区别:
        1. get()方法直接返回实体类,如果查不到数据则返回null,load()会返回一个实体代理对象(当前这个对象可以自动转化为实体对象),当代理对象被调用时,如果没有数据不存在,就会抛出org.hibernate.ObjectNoFoundException异常
        2. load先到缓存(session缓存/二级缓存)中取查,如果没有则返回一个代理对象(不马上到DB中去找),等后面使用这个代理对象操作的时候,才到DB中去查询,这就是常说的load在默认情况下支持延迟加载(lazy)
        3. get先到缓存(session缓存/二级缓存)中去查,如果没有就到DB中去查(即马上发出sql)。总之,如果确定DB中有这个对象就用load(),不确定就用get()(这样可以提高效率)。
    4. 修改一个对象(记录)——update方法

hibernate中configuration和配置文件笔记的更多相关文章

  1. hibernate中Configuration类的作用

    问题:我们在获得一个SessionFactory对象的时候经常是写下面这行代码: SessionFactory sessionFactory = new Configuration().configu ...

  2. Hibernate中延迟加载和缓存

    什么是延迟加载? 延迟加载是指当应用程序想要从数据库获取对象时(在没有设置lazy属性值为false),Hibernate只是从数据库获取符合条件的对象的OId从而生成代理对象,并没有加载出对象 访问 ...

  3. hibernate和mybatis出现配置文件xml的文件报错Multiple annotations found at this line(转)

    hibernate中的xml配置文件Multiple annotations found at this line,出现这个红叉报错,直接是把 <?xml version="1.0&q ...

  4. [原创]java WEB学习笔记77:Hibernate学习之路---Hibernate 版本 helloword 与 解析,.环境搭建,hibernate.cfg.xml文件及参数说明,持久化类,对象-关系映射文件.hbm.xml,Hibernate API (Configuration 类,SessionFactory 接口,Session 接口,Transaction(事务))

    本博客的目的:①总结自己的学习过程,相当于学习笔记 ②将自己的经验分享给大家,相互学习,互相交流,不可商用 内容难免出现问题,欢迎指正,交流,探讨,可以留言,也可以通过以下方式联系. 本人互联网技术爱 ...

  5. [原创]java WEB学习笔记81:Hibernate学习之路--- 对象关系映射文件(.hbm.xml):hibernate-mapping 节点,class节点,id节点(主键生成策略),property节点,在hibernate 中 java类型 与sql类型之间的对应关系,Java 时间和日期类型的映射,Java 大对象类型 的 映射 (了解),映射组成关系

    本博客的目的:①总结自己的学习过程,相当于学习笔记 ②将自己的经验分享给大家,相互学习,互相交流,不可商用 内容难免出现问题,欢迎指正,交流,探讨,可以留言,也可以通过以下方式联系. 本人互联网技术爱 ...

  6. [原创]java WEB学习笔记78:Hibernate学习之路---session概述,session缓存(hibernate 一级缓存),数据库的隔离级别,在 MySql 中设置隔离级别,在 Hibernate 中设置隔离级别

    本博客的目的:①总结自己的学习过程,相当于学习笔记 ②将自己的经验分享给大家,相互学习,互相交流,不可商用 内容难免出现问题,欢迎指正,交流,探讨,可以留言,也可以通过以下方式联系. 本人互联网技术爱 ...

  7. Hibernate中的Configuration类

    Configuration类用来管理我们的配置文件的信息的,通过它,我们可以通过创建一个configuration实例来管理相应的配置文档,但是通常我们只创建一个configuration实例. 下面 ...

  8. 关于Hibernate中的Configuration

    Hibernate中,关于从 Configuration中建立一个SessionFactory常用的可以有两种方法,一种是为Configuration提供hibernate.cfg.xml配置文件,还 ...

  9. hibernate中3个重要的类 Configuration SessionFactory Session

    配置类Configuration 主要负责管理hibernate的配置信息以及启动hibernate,在hibernate运行时,配置文件取读底层的配置信息,基本包括数据库驱动,url.usernam ...

随机推荐

  1. linux:nano 、cat和file

    nano 在 Linux 下面编辑文件通常我们会直接使用专门的命令行编辑器比如(emacs,vim,nano),涉及 Linux 上的编辑器的内容比较多,且非常重要. nano 是 linux 的一款 ...

  2. C常用的字符串函数实现

    /** 查找字符串 source 中 是否有指定的子串出现,如果有返回第一个匹配的字符 @param source 源 @param chars 目标 @return 返回值 */ char *fin ...

  3. day13: 迭代器和生成器

    1,思考所有可以被for循环的:list,tuple,set,dict,range,enumerate,f,str,差不多了,为何这些数据类型可以被for循环呢? 2,一个标准的装饰器函数 from ...

  4. LeetCode 461 Hamming Distance 解题报告

    题目要求 The Hamming distance between two integers is the number of positions at which the corresponding ...

  5. LeetCode 771 Jewels and Stones 解题报告

    题目要求 You're given strings J representing the types of stones that are jewels, and S representing the ...

  6. JQuery is()与hasClass()方法的对比

    is()和hasClass()方法都可以用以检查匹配的所有元素里是否含有指定类名,虽说hasClass(className)函数等价于is(“.className”) 但is()方法比hasClass ...

  7. winform接收全局的快捷键

    public class NativeWIN32 { public NativeWIN32() { } /* ------- using WIN32 Windows API in a C# appli ...

  8. struts2 中的 addActionError 、addFieldError、addActionMessage的方法【转】

    一.addActionError("错误内容"):  Action级别的错误消息this.addActionError("错误信息1");this.addAct ...

  9. vue-router利用url传递参数

    app.vue <template> <div id="app"> <router-link to="/">home< ...

  10. (4.6)mysql备份还原——深入解析二进制日志(2)binlog参数配置解析

    关键词:binlog配置,binlog参数,二进制日志配置,二进制文件参数配置 关键词:binlog缓存,binlog 刷新 0.bin写入流程 写binlog流程如下:# 数据操作buffer po ...