`
xj19891016
  • 浏览: 28712 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
文章分类
社区版块
存档分类
最新评论

重新认识hibernate

阅读更多
hibernate.cfg.xml
<?xml version='1.0' encoding='utf-8'?>

<!DOCTYPE hibernate-configuration PUBLIC

        "-//Hibernate/Hibernate Configuration DTD 3.0//EN"

        "http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd">



<hibernate-configuration>



    <session-factory>



        <!-- Database connection settings -->

        <property name="connection.driver_class"

>org.hsqldb.jdbcDriver</property>

        <property name="connection.url"

>jdbc:hsqldb:hsql://localhost</property>

        <property name="connection.username"

>sa</property>

        <property name="connection.password"

></property>



        <!-- JDBC connection pool (use the built-in) -->

        <property name="connection.pool_size"

>1</property>



        <!-- SQL dialect -->

        <property name="dialect"

>org.hibernate.dialect.HSQLDialect</property>



        <!-- Enable Hibernate's automatic session context management -->

        <property name="current_session_context_class"

>thread</property>



        <!-- Disable the second-level cache  -->

        <property name="cache.provider_class"

>org.hibernate.cache.NoCacheProvider</property>



        <!-- Echo all executed SQL to stdout -->

        <property name="show_sql"

>true</property>



        <!-- Drop and re-create the database schema on startup -->

        <property name="hbm2ddl.auto"

>update</property>



        <mapping resource="org/hibernate/tutorial/domain/Event.hbm.xml"/>



    </session-factory>



</hibernate-configuration

>



在这里,我们配置了 Hibernate 的SessionFactory — 一个关联于特定数据库全局的工厂(factory)。如果你要使用多个数据库,就要用多个的 <session-factory>,通常把它们放在多个配置文件中(为了更容易启动)。

启动 Hibernate,此过程包括创建一个全局的 SessoinFactory,并把它储存在应用程序代码容易访问的地方。SessionFactory 可以创建并打开新的 Session。一个 Session 代表一个单线程的单元操作,org.hibernate.SessionFactory 则是个线程安全的全局对象,只需要被实例化一次。
我们将创建一个 HibernateUtil 辅助类(helper class)来负责启动 Hibernate 和更方便地操作 org.hibernate.SessionFactory。让我们来看一下它的实现:
package org.hibernate.tutorial.util;


import org.hibernate.SessionFactory;

import org.hibernate.cfg.Configuration;


public class HibernateUtil {


    private static final SessionFactory sessionFactory = buildSessionFactory();


    private static SessionFactory buildSessionFactory() {

        try {

            // Create the SessionFactory from hibernate.cfg.xml

            return new Configuration().configure().buildSessionFactory();

        }

        catch (Throwable ex) {

            // Make sure you log the exception, as it might be swallowed

            System.err.println("Initial SessionFactory creation failed." + ex);

            throw new ExceptionInInitializerError(ex);

        }

    }


    public static SessionFactory getSessionFactory() {

        return sessionFactory;

    }


}
如果你在配置文件中给 org.hibernate.SessionFactory 一个名字,在 它创建后,Hibernate 会试着把它绑定到 JNDI。要完全避免这样的代码,你也可以使用 JMX 部署,让具有 JMX 能力的容器来实例化 HibernateService 并把它绑定到 JNDI。这些高级可选项在后面的章节中会讨论到。


加载并存储对象
package org.hibernate.tutorial;


import org.hibernate.Session;


import java.util.*;


import org.hibernate.tutorial.domain.Event;

import org.hibernate.tutorial.util.HibernateUtil;


public class EventManager {


    public static void main(String[] args) {

        EventManager mgr = new EventManager();


        if (args[0].equals("store")) {

            mgr.createAndStoreEvent("My Event", new Date());

        }


        HibernateUtil.getSessionFactory().close();

    }


    private void createAndStoreEvent(String title, Date theDate) {

        Session session = HibernateUtil.getSessionFactory().getCurrentSession();

        session.beginTransaction();


        Event theEvent = new Event();

        theEvent.setTitle(title);

        theEvent.setDate(theDate);

        session.save(theEvent);


        session.getTransaction().commit();

    }


}

sessionFactory.getCurrentSession() 是干什么的呢?首先,只要你持有 org.hibernate.SessionFactory,大可在任何时候、任何地点调用这个方法。getCurrentSession() 方法总会返回“当前的”工作单元。记得我们在hibernate.cfg.xml 中把<property name="current_session_context_class">thread</property>配置选项调整为 "thread" 了吗?因此,因此,当前工作单元被绑定到当前执行我们应用程序的 Java 线程。但是,这并非是完全准确的,你还得考虑工作单元的生命周期范围(scope),它何时开始,又何时结束。
org.hibernate.Session 在第一次被使用的时候,即第一次调用 getCurrentSession() 的时候,其生命周期就开始。然后它被 Hibernate 绑定到当前线程。当事务结束的时候,不管是提交还是回滚,Hibernate 会自动把 org.hibernate.Session 从当前线程剥离,并且关闭它。假若你再次调用 getCurrentSession(),你会得到一个新的 org.hibernate.Session,并且开始一个新的工作单元。
分享到:
评论
发表评论

文章已被作者锁定,不允许评论。

相关推荐

    经典struts+hibernate结合的电影售票系统项目

    电影售票系统采用struts+hibernate再结合java的dao模式框架做的,具有典型的mvc结构,在后台操作电影影片中:在添加电影这步,我用了上传案例结合...很不错的例子,相信大家看后能比较清晰认识struts和hibernate

    Hibernate之配置使用案例hibernate001

    通过以上步骤,我们已经对Hibernate的基本配置和使用有了全面的认识。在实际项目中,还需要根据具体需求进行事务管理、缓存配置、性能优化等更高级的应用。对于`hibernate001`这个案例,它可能是进一步展示了这些...

    Hibernate中Example的用法

    ### Hibernate中Example的用法详解 #### 一、前言 ...通过本文的介绍,相信你已经对`Example`的使用有了全面的认识,接下来不妨在实际项目中尝试运用这些技巧,以提高你的Hibernate应用开发水平。

    hibernatesynchronizer_3.1.9

    《深入理解Hibernate Synchronizer 3.1.9:整合与优化》 Hibernate Synchronizer是一款...然而,也需要注意,任何自动化工具都不能替代对业务逻辑的理解和对代码质量的把控,开发者仍需保持对项目整体架构的清晰认识。

    hibernate in action 中文版书籍

    1. **Hibernate概述**:介绍Hibernate的基本概念,包括它的历史、目标和在Java应用中的地位,以及与JDBC的关系和对比,帮助读者建立对Hibernate的初步认识。 2. **安装与配置**:讲解如何在项目中集成Hibernate,...

    Hibernate结构图

    Hibernate详细的架构图,很好的架构系统,能全面认识Hibernate。

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

    - 先实践后理论:通过动手实践,建立起对Hibernate的直观认识,然后再深入学习背后的原理。 - 注重注解:随着Java的发展,注解配置逐渐取代XML配置,因此在学习过程中应侧重于注解的使用。 资源: - Hibernate官方...

    hibernate annotation spring 中文参考文档

    在IT行业中,Hibernate、Spring和Hibernate ...而"hibernate_reference.pdf"则能让你对Hibernate有更全面的认识,包括其非注解的使用方式。这些知识对于提升Java EE开发技能、优化项目结构和提高开发效率至关重要。

    Hibernate课件-------超全超详细的介绍hibernate

    许多有经验的开发人员都有一个共同的认识,那就是Hibernate要比Struts和Spring难掌握得多,初学者要想学好Hiberante就更是难上加难了!本课程的讲解者李勇老师的技术功底非常深厚,课程内容组织得非常合理和巧妙,...

    自己编写仿hibernate的java框架

    通过这个项目,你可以深入了解ORM的工作原理,提升Java编程技能,并对数据库操作有更深入的认识。同时,这也是一个很好的实践项目,可以帮助你理解框架设计的原则和挑战。在实现过程中,你可能会遇到各种问题,解决...

    Hibernate5快速学习步骤

     Hibernate 初认识  Hibernate 的HelloWorld  hibernate.cfg.xml 配置详解  *.hbm.xml 对象映射文件详解  Hibernate 核心接口详解  抽取HibernateUtil 工具类  使用Session 接口进行增删改查

    hibernate 电子书全集

    10. **实战认识**:通过实例演示如何在实际项目中应用Hibernate。 《hibernate in action》是另一本知名书籍,它通常会提供更深入的技术洞察,可能涵盖以下内容: 1. **Hibernate核心概念**:深入理解Hibernate的...

    hibernate例子程序

    通过深入研究这个例子,你将对Hibernate的工作流程有清晰的认识,为后续的实际项目开发打下坚实基础。在实践中不断优化和调整,你会发现Hibernate是Java ORM领域的强大工具,能显著提升开发效率。

    hibernate中的对象关系模型

    在Java持久化框架Hibernate中,对象关系模型(Object-Relational Mapping,ORM)是将数据库中的数据映射到Java对象的技术。它使得开发者能够用面向对象的方式来操作数据库,简化了数据库编程的过程。以下是对...

    hibernate联合主键全攻略

    在探讨Hibernate中联合主键的使用时,我们首先需要理解什么是联合主键以及它在Hibernate框架中的实现方式。...开发者在享受其带来的灵活性和功能增强的同时,也需对其潜在的风险有充分的认识和准备。

    SSH之Hibernate总结

    SSH之Hibernate总结 SSH(Struts、Spring、Hibernate)是Java Web开发中...通过以上内容,你可以对Hibernate有全面的认识,并具备基本的使用能力。继续深入学习,你将能够熟练地运用Hibernate解决实际开发中的问题。

    精通hibernate3.0(第三版).rar

    1. Hibernate基本概念:介绍Hibernate的核心思想,如实体、持久化类、对象状态管理、事务处理等,帮助初学者建立对ORM框架的基本认识。 2. Hibernate配置:讲解如何配置Hibernate的XML文件,包括hibernate.cfg.xml...

    Hibernate_Query_Language基础认识.rar

    **Hibernate Query Language(HQL)基础认识** Hibernate Query Language(HQL)是Hibernate框架中用于操作对象关系映射(ORM)的一种查询语言。它类似于SQL,但专为面向对象编程设计,使得开发者能够以类和对象的...

    Hibernate中的Criteria的认识

    在深入探讨Hibernate框架中Criteria API的使用之前,我们先简要了解一下Hibernate本身。Hibernate是一个开源的对象关系映射(ORM)框架,它简化了Java应用程序与数据库之间的交互过程,通过将对象模型映射到数据库...

Global site tag (gtag.js) - Google Analytics