`
wangyanlong0107
  • 浏览: 495080 次
  • 性别: Icon_minigender_1
  • 来自: 沈阳
社区版块
存档分类
最新评论

【转】Hibernate中重要对象的详解

 
阅读更多

★→→SessionFactory (org.hibernate.SessionFactory)
包含已经编译的映射(mappings),是制造session的工厂,可能含有一些可以在
各个事务(transaction)之间共享的数据
(1) SessionFactory的缓存
可分为两类:内置缓存和外置缓存。
SessionFactory的内置缓存中存放了Hibernate配置信息和映射元数据信息、同时也缓存了Hibernate自动生成的SQL语句等;
SessionFactory的外置缓存是一个可配置的缓存插件,在默认情况下,SessionFactory不会启用这个缓存插件。外置缓存
能存放大量数据库数据的拷贝,外置缓存的物理介质可以是内存或者硬盘。

(2) 只有一个数据存储源,只需创建一个SessionFactory
SessionFactory就是个重量级对象,如果应用只有一个数据存储源,只需创建一个SessionFactory实例,
因为随意地创建SessionFactory实例会占用大量内存空间。
但是当你的项目要操作多个数据库时,那你必须为每个数据库指定一个SessionFactory。
(3) Configuration的其他用法
Configuration的configure ()方法还支持带参数的访问方式,你可以指定hbm.xml文件的位置,而不是使用默认的classpath
下面的hibernate.cfg.xml这种方式,例如:
Configuration cfg = new Configuration().configure("myexample.xml");


★★→→Configuration
Configuration是hibernate的入口,在新建一个Configuration的实例的时候,hibernate会在classpath里面查找
hibernate.properties文件,如果该文件存在,则将该文件的内容加载到一个Properties的实例GLOBAL_PROPERTIES里面,
如果不存在,将打印信息:hibernate.properties not found
    然后是将所有系统环境变量(System.getProperties())也添加到GLOBAL_PROPERTIES里面。如果hibernate.properties文件存在,
系统还会验证一下这个文件配置的有效性,对于一些已经不支持的配置参数,系统将打印警告信息。 
(1) 作用---实现对Hibernate进行配置
? Configuration接口的作用是对Hibernate进行配置,以及对它进行启动
在Hibernate的启动过程中,Configuration类的实例首先定位映射文档的位置,读取这些配置,然后创建一个SessionFactory对象。
? 根据Configuration对象创建一个SessionFactory对象
为了能创建一个SessionFactory对象,你必须在Hibernate初始化时创建一个Configuration类的实例,并将已写好的映射文件交由它处理。
这样,Configuration对象就可以创建一个SessionFactory对象,当SessionFactory对象创建成功后,Configuration对象就没有用了,你可以简单地抛弃它。

(2) 它是启动hibernate的对象
虽然Configuration接口在整个Hibernate项目中只扮演着一个很小的角色,但它是启动hibernate时你所遇到的第一个对象。

(3) Configuration config = new Configuration();
config.addClass(Customer.class);
sessionFactory = config.buildSessionFactory();
或者:
使用方法链编程风格,可以改写为: 
sessionFactory = new Configuration().buildSessionFactory().addClass(Customer.class).buildSessionFactory();
注意:
方法链编程风格能使应用程序代码更加简捷。在使用这种编程风格时,最好把每个调用方法放在不同的行,否则在跟踪程序时,无法跳入每个调用方法中。

★★★→→Session(org.hibernate.Session)
(1) 单线程的,短寿命的对象,代表了一次会话的过程。实际上是把一个JDBC Connection打包
了,它可以包含一些持久化对象的缓存
看作介于数据连接与事物管理一种中间接口.
在hibernate的设计者中.他们将session看作介于数据连接与事物管理的一种中间接口
或者想象成一个持久对象的缓冲区
hibernate能检测到这些持久对象的改变,并及时刷新数据库

(2) 每一个Session实例和一个数据库事务绑定
通常将每一个Session实例和一个数据处理库事务绑定
就是说,每执行一个数据库事务(操作),都应该先创建一个新的Session实例.
如果事务执行中出现异常,应该撤消事务.
不论事务执行成功与否,最后都应该调用Session的close()方法,从而释放Session实例
占用的资源.

(3) 如何获得Session对象
首先创建SessionFactory对象
应用服务器如果访问多个数据源时,则应该产生多个SessionFactory;
但是仅仅为了服务与某个请求时,不要创建一个新的SessionFactory,因为创建
SessionFactory需要消耗大量的资源.
然后根据SessionFactory再创建Session对象
例如:::::
----------------------------------------------------------------------------------
Session session=sessionFactory.openSession();
Transaction tx;
try{
    tx=session.beginTransaction();//开始一个事务
    .......//执行事务
    tx.commit();  
}catch(Exception e){//如果出现异常就撤消事务
    if(tx!=null)
     tx.rollback();
    throw e;
}
finally//不管事务执行成功与否,最后都关闭Session并且放在finally中以提高安全性
    session.close();
-----------------------------------------------------------------------------------
(4) Sessin 接口中的常用方法
基本的CURD操作(save()方法:把Java对象保存数据库中、update()方法:更新数据
库中的Java对象、delete()方法:把Java对象从数据库中删除、load()方法:从数据
库中加载Java对象 和find()方法:从数据库中查询Java对象);执行查询;

◆ save()方法:save() 和persist()方法产生SQL INSERT
session = HibernateUtil.currentSession();
        tx = session.beginTransaction();
        Book oneBook = new Book();      
oneBook.setBookName(new String("J2EE应用开发".getBytes("gb2312"), "ISO8859-1"));
        oneBook.setBookKind('1');
        oneBook.setBookPrice(7.4f);
        session.save(oneBook); 
        tx.commit();
◆? Sessin 接口中的常用方法---- updata()和merge()方法产生SQL UPDATE
该方法调用Session的load()方法,加载Customer对象,然后再修改Customer对象的属性。
       session = HibernateUtil.currentSession();
        tx = session.beginTransaction();
        Book oneBook=(Book)session.load(Book.class,bookID);
oneBook.setBookName(new String("Java应用开发".getBytes("gb2312"), "ISO8859-1"));
        oneBook.setBookKind('1');
        oneBook.setBookPrice(10.4f);
        tx.commit();

◆? Sessin 接口中的常用方法---- load和get方法
session的load和get方法根据给定的OID从数据库中加载一个对象,load方法在没有找    到对象时抛出notFoundException异常,get方法返回null;
get和load和其他查询方法返回的对象位于session的缓存中,修改了对象的属性后,    session清理缓存时,会根据持久化对象的属性来更新数据库。
用来对数据库中检索对象,load()和get()方法按照给定的OID加载一个持久化对象
public Iterator getAllCourses()throws HibernateException
{
String queryString = "select courses from Course as courses";
beginTransaction();
Query query = session.createQuery(queryString);
Iterator it= query.iterate();
return it;
}
/**
*按course的名字进行模糊查找,返回的是包含有Course持久对象的Iterator。
*/
public Iterator getSomeCourse(String name)throws HibernateException
{
String queryString = "select c from Course as c where c.name like :name" ;
beginTransaction();
Query query = session.createQuery(queryString);
query.setString("name", "%"+name+"%");
Iterator it= query.iterate();
return it;
}

◆? Sessin 接口中的常用方法---- delete()方法产生SQL DELETE
由于从数据库中删除对象对应的记录,如果出入的是持久化对象session就计划执行一个delete语句。
如果出入的参数是游离态对象,先使它成为持久化对象,然后计划执行一个delete语句。session只有在清理缓存的时候才会执行delete语句。
只有当调用session的close()方法时才会从session的缓存中删除对象。
session = HibernateUtil.currentSession();s
        tx = session.beginTransaction();
        Book oneBook=(Book)session.load(Book.class,bookID);
        session.delete(oneBook);
        tx.commit();

  
★★★★→→Transaction
★★★★★→→Query查询对象
Query接口让你方便地对数据库及持久对象进行查询,它可以有两种表达方式:HQL语言或本地数据库的SQL语句。
Query经常被用来绑定查询参数、限制查询记录数量,并最终执行查询操作。

Query query=session.createQuery();
List list = query.list();//把query查询对象放到Query的list里面,返回一个query对象

★★★★★★Callback 方面的接口 
当一些有用的事件发生时――例如持久对象的载入、存储、删除时,Callback接口会通知Hibernate去接收一个通知消息---它允许
应用程序能对一些事件的发生作出相应的操作。例如Interceptor、Lifecycle和Validatable都是这一类接口。一般而言,
Callback接口在用户程序中并不是必须的,但你要在你的项目中创建审计日志时,你可能会用到它。


◎第一步.---->获取Sessionfactory对象
Sessionfactory sf=new Configuration().configure().buildSessionFactory();
◎第二步.---->创建session对象
Session session=sf.openSession();
◎第三步.---->获取对数据库操作前的事物对象
Transaction tx=session.beginTransaction();
◎第四步.---->利用session的多个方法进行数据操作.例如:session.save(实体bean对象);session.update(实体bean对象)等;
◎第五步.---->tx.commit();保存持久化数据库操作;

◎ 数据其他操作.比如查询Query query=session.createQuery("from student where username='"+username"'");//student为一个实体bean对象.就是与hbm.xml对应的和数据库映射的一个 javabean.


其他接口::::::::::::::::::

:::::::::::::::::::::::::::::::::::::::::? 主键的生成 (IdentifierGenerator 接口) 
?           本地SQL语言支持 (Dialect 抽象类) 
?           缓冲机制 (Cache 和CacheProvider 接口) 
?           JDBC 连接管理 (ConnectionProvider接口) 
?           事务管理 (TransactionFactory, Transaction, 和 TransactionManagerLookup 接口) 
?           ORM 策略 (ClassPersister 接口) 
?           属性访问策略 (PropertyAccessor 接口) 
?           代理对象的创建 (ProxyFactory接口)

分享到:
评论

相关推荐

    精通Hibernate:Java对象持久化技术详解.pdf

    Hibernate是Java开发中的重要工具,它简化了数据库操作,使开发者可以更加专注于业务逻辑,而不用过于关注底层SQL的编写。 首先,Hibernate的核心概念是对象关系映射(ORM),它通过在Java对象和数据库记录之间建立...

    精通Hibernate:Java对象持久化技术详解

    《精通Hibernate:Java对象持久化技术详解》一书聚焦于Java开发中的对象持久化技术,主要围绕Hibernate这一流行ORM框架进行深入探讨。Hibernate是Java世界里的重要工具,它简化了数据库操作,使得开发者可以更加专注...

    精通Hibernate:Java对象持久化技术详解(第2版)源码1

    《精通Hibernate:Java对象持久化技术详解(第2版)》是一本深入解析Java对象持久化框架Hibernate的专业书籍。源码文件涵盖了多个章节,包括chapter1到chapter10,这表明该书通过实例代码详细讲解了Hibernate的核心...

    hibernate包详解+hibernatePPT

    **hibernate包详解** Hibernate 是一款开源的对象关系映射(ORM)框架,它为Java开发者提供了一种在关系数据库和面向对象编程之间架起桥梁的解决方案。通过使用Hibernate,开发人员可以避免直接编写SQL语句,而是用...

    (高清版)精通 Hibernate_Java 对象持久化技术详解(第2版).pdf

    ### 知识点一:Hibernate框架概述 - **定义与作用**:Hibernate是...这本《精通 Hibernate_Java 对象持久化技术详解(第2版)》涵盖了从基础到高级的所有重要内容,非常适合希望深入学习Hibernate技术的Java开发者阅读。

    hibernate:java持久化对象详解02

    本教程“hibernate:java持久化对象详解02”是系列教程的一部分,它将继续深入探讨Java中的持久化对象与Hibernate的使用方法。在开始之前,建议先学习“hibernate:java持久化对象详解01”,以确保对基础概念有清晰的...

    hibernate中文开发详解

    《Hibernate中文开发详解》是针对Hibernate框架的一份详尽指南,旨在帮助开发者深入了解并掌握这一持久化技术。本文将基于给定的标题、描述、标签和部分内容,深度解析Hibernate的关键概念与开发技巧。 ### ...

    hibernate-mapping参数详解

    4. `cascade`:级联操作是Hibernate中的一个重要特性,用于管理对象之间的关系。`cascade`参数可以设置为`all`、`none`、`save-update`、`delete`等值,控制何时对关联对象执行相同的操作。例如,`none`意味着没有...

    Hibernate缓存深入详解

    【Hibernate缓存深入详解】 在Java的持久化框架Hibernate中,缓存机制是提升系统性能的关键因素。它位于Hibernate应用和数据库之间,减少了对数据库的直接访问,从而提高了应用程序的运行速度。缓存中存储的是...

    Hibernate缓存深入详解 from ITEye

    在Java企业级应用开发中,Hibernate作为一款强大的对象关系映射(ORM)框架,极大地简化了数据库操作。然而,随着应用规模的扩大,数据访问性能成为了一个不可忽视的问题。这时,Hibernate的缓存机制就显得尤为重要...

    hibernate--5.Hibernate配置文件详解

    在Java世界中,Hibernate是一个非常流行的对象关系映射(ORM)框架,它简化了数据库操作,使得开发者可以使用面向对象的方式来处理数据。本篇将详细解析Hibernate的配置文件,帮助你深入理解其工作原理和配置过程。 ...

    hibernate--5.Hibernate配置文件详解-2

    在Java世界中,Hibernate是一个非常重要的对象关系映射(ORM)框架,它简化了数据库操作,使得开发者可以更专注于业务逻辑而不是底层的数据访问细节。本文将深入探讨Hibernate配置文件,这是使用Hibernate进行数据库...

    hibernate:java持久化对象详解01

    本教程“hibernate:java持久化对象详解01”聚焦于理解Hibernate如何将Java对象持久化到数据库中。 首先,让我们了解一下什么是持久化对象。在Java中,持久化对象是指那些状态可以被保存到持久存储介质(如数据库)...

    hibernate2开发包详解

    ### hibernate2开发包详解 #### 一、概述 Hibernate是一个开源的对象关系映射(ORM)框架,用于Java应用程序中的持久化操作。它允许开发者将Java对象映射到数据库表中,从而简化了数据访问层的开发工作。本文将...

    hibernate 连接池配置详解

    ### Hibernate 连接池配置详解 #### 一、概述 在使用Hibernate进行数据库操作时,合理配置连接池是非常重要的一步。连接池可以帮助我们更高效地管理数据库连接资源,避免频繁创建与销毁数据库连接带来的性能开销。...

    精通Hibernate:Java持久化对象技术详解[第二版]

    总之,《精通Hibernate:Java持久化对象技术详解[第二版]》是Java开发者提升数据库操作技能,深入了解ORM技术的重要参考资料。通过学习本书,读者不仅可以熟练掌握Hibernate的使用,还能了解到如何在实际项目中优化...

    hibernate持久化技术详解.孙卫琴.代码2

    **hibernate持久化技术详解** Hibernate是一款强大的Java对象关系映射(ORM)框架,它为开发者提供了在Java应用中操作数据库的强大工具。通过Hibernate,开发者可以将数据库操作转化为对Java对象的操作,大大降低了...

    Hibernate_ORM步骤详解

    Hibernate ORM 是一种强大的Java持久层框架,它实现了对象关系映射(ORM)的概念,使得开发者可以使用面向对象的方式来操作数据库...理解Hibernate的持久化机制和ORM原理,对于掌握Java Web开发中的数据管理至关重要。

Global site tag (gtag.js) - Google Analytics