zoukankan      html  css  js  c++  java
  • Hibernate--基础知识

    Hibernate的基本组成:

      实体类,实体类的映射文件,hibernate的配置文件

    Hibernate中的常用接口:

    Configuration:

       读取Hibernate的配置文件。

    概述:Configuration 类负责管理Hibernate 的配置信息,即:加载Hibernate配置文件(hibernate.cfg.xml)。它包括如下内容:
    Hibernate运行的底层信息:数据库的URL、用户名、密码、JDBC驱动类,数据库Dialect,数据库连接池等( hibernate.cfg.xml )。
    Hibernate实体映射文件(*.hbm.xml)。
    Hibernate读取配置文件的两种方法:
    读取属性文件(hibernate.properties)-基本不会采用这种配置文件
           调用代码:Configuration cfg = new Configuration();
    读取XML文件(hibernate.cfg.xml)—常采用这种配置文件
       调用代码:Configuration cfg = new Configuration().configure();

    SessionFactory(会话工厂):

     一个SessionFactory(会话工厂)对应一个数据库。

     它与数据库绑定,一个数据库对应一个SessionFactory,关于数据库中的所有东西(例如:表之间的关联)都放在SessionFactory中了,二级缓存与SessionFactory相关,二级缓存就是进程级的缓存,就相当于Web中的Application对象,因此它是重量级的,它的创建时间比较耗时,所以该对象只创建一个,不要频繁创建。
          应用程序从SessionFactory(会话工厂)里获得Session(会话)实例。它在多个应用线程间进行共享,所以SessionFactory是线程安全的。通常情况下,整个应用只有唯一的一个会话工厂——例如在应用初始化时被创建。然而,如果你使用Hibernate访问多个数据库,这时你就需要对每一个数据库使用不同的会话工厂(即:需要为每个数据库都创建一个会话工厂)。
         会话工厂缓存了生成的SQL语句和Hibernate在运行时使用的映射元数据。
    调用代码:
           SessionFactory sessionFactory = cfg.buildSessionFactory();
    说明:SessionFactory由Configuration对象创建,所以每个Hibernate配置文件,实际上是对SessionFactory的配置。(对照hibernate.cfg.xml文件)

    Session(会话):

     它是操纵Hibernate进行CRUD(增、删、改、查)操作的。

    Hibernate在进行CRUD操作时必须使用Session,Session不同于JDBC中的Connection。也可以这样理解Session对Connection又进行了一层包装,打开一个Session并不等于打开一个Connection那么简单,因为Session的功能要比Connection强,Session不仅具有Connection的功能,还具有管理一级缓存的功能,例如:在Hibernate中保存一个对象,Hibernate要完成两个功能,一是发出相应的SQL语句将数据存储到数据库表中,另一个功能是把当前这个对象放入到缓存中。
    Session不是线程安全的,它代表与数据库之间的一次操作,它的概念介于Connection和Transaction之间,由于不是线程安全的,所以不能多线程共享使用,否则会产生莫明其妙的问题,Session通常是一个业务请求过来,就open出一个Session,业务请求完毕后Session随之关闭,通常是Session关闭后,与该Session对应的事务就关闭了,即一个业务请求对应一个事务。
    Session也称为持久化管理器,因为它是与持久化有关的操作接口。
    Session通过SessionFactory打开,在所有的工作完成后,需要关闭。
    它与Web层的HttpSession没有任何关系。
     调用代码
          Session session = sessionFactory.openSession();

    Transaction(事务):

    在进行数据查询时不需要打开事务;当对数据进行增删改的时候才有必要打开事务。

    概述
          它将应用代码从底层的事务实现中抽象出来——这可能是一个JDBC事务,或者是一个JTA用户事务甚至可能还是一个公共对象请求代理结构(CORBA)——允许应用通过一组一致的API控制事务边界(即:底层无论是什么事务,我们在编写代码时使用的是相同的API,API会自己协调底层不同事物之间的差别,我们不需要关心)。这有助于保持Hibernate应用在不同类型的执行环境或容器中的可移植性。
     调用代码:
        Transaction tx = session.beginTransaction();
     注:使用Hibernate进行操作时必须显式的调用Transaction
         (默认:autoCommit=false)。

     Query接口

    概述:
          Query(查询)接口允许你在数据库上执行查询并控制查询如何执行。查询语句使用HQL或者本地数据库的SQL方言(即数据库的SQL语句)编写。
     调用代码:
        Query query = session.createQuery("from User");

  • 相关阅读:
    公司到底是怎么看我们的……[转]
    C# String.Format 的使用[转]
    Oracle9I 在安装时出现[登台区出现问题,请确保指定有效的“源”和“目标”!]
    街机游戏下载
    C#操作Excel时直接引用Com和InteropExcel的差异
    我所理解的接口和抽象类[转]
    c# winFrom 使窗体显示SplitContainer或Panel中[转]
    SQL Server 2005之PIVOT/UNPIVOT行列转换(转)
    Solaris大半年使用感触
    solaris上的pkg管理
  • 原文地址:https://www.cnblogs.com/fatfatdachao/p/3451146.html
Copyright © 2011-2022 走看看