`
liuyf8688
  • 浏览: 99758 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

Hibernate参考文档笔记二

阅读更多

五、Contextual Sessions

许多应用程序需要一种和上下文有关联Hibernate session,这样的session是指贯穿于给定环境的上下文中都有效的session。无论如何,贯穿于应用程序应用上下文由什么组成的清晰度不同,不同的上下文针对当前的概念有不同的范围。

使用Hibernate 3.0以前版本的应用程序,趋于使用自已实现的基于ThreadLocal来维护前后关系的session、诸如HibernateUtil的帮助类;或使用基于代理或拦截机制的第三方的框架(SpringPico)。

Hibernate 3.0.1Hibernate加入了SessionFactory.getCurrentSession()方法。最初,假定使用JTA事务定义了当前sessionscopecontextHibernate团队维护时,给定了成熟的卓越的JTA TransactionManager的实现方式,多数(但不是所有)应用程序应该使JTA transaction management,不论它是否发布到一个JEE容器中。基于这一点,基于用JTA来维护上下文关系中的session应该是必须的。

无论如何,在Hibernate 3.1SessionFactory.getCurrentSession()之后的处理,是可以被插拔的,也就是说可以session的范围和上下文。新扩展接口(org.hibernate.context.CurrentSessionContext)和新的配置参数(hibernate.current_session_context_class)被加入,允许插拔,也就是说可以定义session的范围和上下文。

细节可以查看org.hibernate.context.CurrentSessionContext的文档。它定义了一个currentSession()方法,负责跟踪与当前上下文相关联的sessionHibernate提供了这个接口的三种实现方式。

1.org.hibernate.context.JTASessionContext

当前session,通过JTA事务跟踪和标识生命周期。这里的处理过程在处理方法上和老JTA是相似的。

2.org.hibernate.context.ThreadLocalSessionContext

当前session,通过当前执行的线程来跟踪。

3.org.hibernate.context.ManagedSessionContext

当前session,通过当前执行的线程来跟踪。你是负责绑定和解除当前session到执行线程通过使用这个类的静态方法。该类不会openflushclose session

前两个实现类,提供了“一个session对应一个数据库事务”的编程模式,也就是众所周知的“session-per-request”模式。Hibernate session的开始和结束,是以数据库中事务的执行时间为依据的。如果你使用编程方式划分事务,用简单的JSE需不是JTA,你应该考虑使用Hibernate事务APIs来隐藏低层的事务代码。如果你使用的是JTA,使用JTA的接口来划分事务。如果你在一个支持CMTContainer Management Transaction)的容器运行程序,事务是通过声明定义,在你程序中不需要任何的代码来划分事务。

Hibernate.current_session_context_class参数应该指定,一个org.hibernate.context.CurrentSessionContext的实现类。如果配置参数没有被设置,而是配置了一个org.hibernate.transaction.TransactionManagerLookup被设置,Hibernate将使用org.hibernate.context.JTASessionContext,这里要考虑向后兼容。典型的情况下,这个参数是使用的类的名字。对于Hibernate提供的三个实现类,有对应的三个简短名,“jta”、“thread”、“managed”。

六、Configuration

1.编程配置

一个org.hibernate.cfg.Configuration的实例表示一个应用程序的所有Java类型到数据库类型的映射。org.hibernate.cfg.Configuration是用来建造一个org.hibernate.SessionFactory。被编译的映射是来自所有的XML映射文件。

片断1.

Configuration cfg = new Configuration().addResource(“test.hbm.xml”);

片断2.

Configuration cfg = new Configuration().addClass(com.test.class);

片断3.

Configuration cfg = new Configuration().setProperty(“hibernate.dialect”, “org.hibernate.dialect.DB2Dialect”);

Configuration可以接收的选项:

1)传递一个java.util.PropertiesConfiguration.setProperties()

2)放一个hibernate.properties文件到类路径的根目录。

3)设置系统properties,通过java –Dproperty=value

4)包含<property>标签指定值在hibernate.cfg.xml文件。

org.hibernate.cfg.Configuration对象是有意作为一个开始时间生成的对象的,一旦SessionFactory被创建,他将被抛弃掉。

七、获取SessionFactory

org.hibernate.cfg.Configuration解析完所有的映射文件后,应用程序应该获取一个org.hibernate.Session实例的工厂。这个工厂是被应用程序的所有线程共享的。

SessionFactory sessionFactory = cfg.buildSessionFactory();

Hibernate允许应用程序实例多个SessionFactory。对于使用多个数据库的应用程序是非常有用的。

八、JDBC ConnectionsSession是对JDBC连接的封装)

通常,你应该使用org.hibernate.SessionFactory来创建或共享JDBC。如果这采用这种方法,是非常简单的。

Session session = sessionFactory.openSession();

当你的操作需要访问数据库时,一个JDBC连接就会从连接池中被获取。

对于这个工作,我们应该给Hibernate提供一些JDBC连接属性。所有的Hibernate属性名和语义学都被定义在org.hibernate.cfg.Environment。我们现在描述对于JDBC连接配置的一些更重要的设置。

1.如果你设置以下属性,Hibernate将获取或共享连接使用java.sql.DriverManager

hibernate.connection.driver_class

hibernate.connection.url

hibernate.connection.username

hibernate.connection.password

hibernate.connection.pool_size

Hibernate自己拥有的连接池算法是没有发展的。他是为了你的初始接触使用的,而不是为了你的产品使用的,甚至性能测试时使用。为了更好的性能和稳定性考虑,你应该使用第三方的连接池产品。只需要替换hibernate.connection.pool_size属性的设置用相应连接池的设置。这将关闭Hibernate内部的连接池。例如,可以使用C3P0

C3P0是一个开源的JDBC连接池,被放置在Hibernate发布文件的lib目录下,随Hibernate一块发行。如果你设置hibernate.c3p0.*属性,Hibernate将会使用org.hibernate.connection.C3P0ConnectionProvider为共享连接。如果你想使用proxool作为连接池,你可以通过查阅hibernat.propertiesHibernate站点获取需要设置的属性名设置。

C3P0配置举例,属性文件片断:

hibernate.connection.driver_class=

hibernate.connection.url=

hibernate.connection.username=

hibernate.connection.password=

hibernate.c3p0.min_size=

hibernate.c3p0.max_size=

hibernate.c3p0.timeout=

hibernate.c3p0.max_statements=

hibernate.dialect=

2.对于在应用服务器内运行的程序,多数情况你应该配置Hibernate通过JNDI找到服务器的javax.sql.DataSource来获取连接。你需要设置以下属性。

hibernate.connection.datasource

hibernate.jndi.url (可选)

hibernate.jndi.class (可选)

hibernate.connection.username (可选)

hibernate.connection.password (可选)

你可以通过实现org.hibernate.connection.ConnectionProvider来定义自己的获得连接的策略。通过hibernate.connection.provider_class配置使用自己的定义起作用。

分享到:
评论

相关推荐

    Hibernate Annotation 学习笔记

    3. 更深入的学习:要深入了解Hibernate Annotation,可以参考官方文档`hibernate_annotations_3.2.1.pdf`(英文原稿)和中文翻译版`hibernate_annotations_zh.pdf`(满江红翻译)。这些文档详细介绍了各种注解的用法...

    Hibernate学习笔记源码及文档

    **Hibernate学习笔记源码及文档** Hibernate 是一款强大的Java持久化框架,它简化了数据库操作,使得开发者可以更专注于业务逻辑而不是数据库交互。本资源包含了Hibernate的学习笔记、源码分析以及开发流程说明文档...

    Java EE 相关资料(Struts中文手册、Struts API、Hibernate 学习笔记、Hibernate API文档)

    "Hibernate3.2官方中文参考手册.pdf"和"hibernate3.2.rar"提供了Hibernate 3.2版本的详细官方文档和源码。虽然版本较旧,但依然能为初学者提供基础的理解,包括实体管理和事务处理、缓存策略、多对一、一对多、一对...

    尚学堂hibernate学习笔记(原版整理)

    【尚学堂Hibernate学习笔记】是一份详尽的学习资料,旨在...总之,这份尚学堂Hibernate学习笔记是全面了解和学习Hibernate的宝贵资料,不仅涵盖了基础概念,还深入到实践操作和高级话题,适合初学者和进阶者共同参考。

    Hibernate文档资料

    这份“Hibernate文档资料”涵盖了Hibernate的多个重要方面,包括开发指南、学习笔记、原理与配置以及中文参考文档,这些都是深入理解和掌握Hibernate所必不可少的资源。 首先,`Hibernate开发指南`通常会详细阐述...

    马士兵hibernate学习笔记.docx

    在学习过程中,建议遵循“先脉络,后细节”、“先操作,后原理”的原则,结合Annotation进行配置,减少XML的繁琐,同时充分利用官方文档和参考资料,例如Hibernate官网(http://www.hibernate.org)和中文文档,以及...

    马士兵hibernate学习笔记

    - `hibernate.hbm2ddl.auto`用于自动管理数据库表的创建和更新。 - 映射文件中可以通过`&lt;property&gt;`元素配置字段和属性之间的映射关系,包括字段名和属性名的映射、日期和时间类型的精确度等。 #### 五、ID生成...

    JAVA-hibernate笔记

    中文版的Hibernate文档,是学习过程中重要的参考资料。 通过这份笔记,你不仅能够学习到Hibernate的基本使用,还能了解到它的设计理念和最佳实践。希望它对你在Java开发中的ORM之路有所帮助。

    hibernate笔记

    - Hibernate中文文档:提供详细的中文参考手册,便于学习。 - Hibernate Annotation参考资料:对于使用注解配置的开发者,这是一个重要的参考来源。 环境准备: - 下载Hibernate发行版:例如hibernate-distribution...

    chm参考文档

    这个参考文档可能包含选择器、遍历、DOM操作、事件、效果、Ajax、插件和API等方面的详细说明,帮助开发者理解和使用jQuery进行网页动态效果的创建和页面交互的优化。 【MySQL5.1参考手册.chm】 MySQL是一个开源的...

    hibernate学习资料大合集

    这两份PDF文档可能是官方的完整教程或参考手册,不仅覆盖了基础内容,还可能涉及高级特性,如缓存机制、二级缓存、多态性、集合映射、级联操作、事件监听器以及性能优化策略等。深入学习这些内容,可以提升开发者在...

    留言管理程序_使用Struts + DAO + Hibernate完成笔记.zip

    综合上述内容,这个“留言管理程序”是一个全面展示Struts、DAO和Hibernate集成应用的实例,对于学习和理解这些技术的交互以及构建Web应用具有很高的参考价值。通过研究和实践这个项目,开发者可以提升自己在Web开发...

    struts2.1.8+spring2.5+hibernate3.2+ext3.0框架整合笔记(三)

    Struts2、Spring2.5和Hibernate3.2是经典的Java Web开发框架组合,被称为SSH。...不过,需要注意的是,随着框架版本的更新,整合方法和最佳实践也会有所变化,因此在实际项目中应参考最新的文档和教程。

    hibernate_chm.rar

    2. **hibernate学习笔记.doc**:这可能是某个人的学习笔记,记录了他们学习Hibernate的过程和理解,可能包括一些个人的理解和技巧,对于初学者来说是很好的参考资料。 3. **0801Hibernate.doc**:这个名字可能是...

    Hibernate开发资料

    Hibernate的技术文档是理解其核心概念和API的重要参考。CHM文件通常包含官方的API文档和用户指南,包括实体管理、会话管理、查询语言(HQL)以及Criteria API等内容。学习者可以通过文档深入理解Hibernate的核心...

    Hibernate_PDF_超好

    这个文档是开发者在实际编程时的重要参考工具,包含了所有Hibernate类、接口及其方法的详细说明。开发者可以通过查阅此文档,快速定位并理解 Hibernate 中的各种类和方法,以解决开发过程中遇到的具体问题。 再者,...

Global site tag (gtag.js) - Google Analytics