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再结合java的dao模式框架做的,具有典型的mvc结构,在后台操作电影影片中:在添加电影这步,我用了上传案例结合...很不错的例子,相信大家看后能比较清晰认识struts和hibernate
通过以上步骤,我们已经对Hibernate的基本配置和使用有了全面的认识。在实际项目中,还需要根据具体需求进行事务管理、缓存配置、性能优化等更高级的应用。对于`hibernate001`这个案例,它可能是进一步展示了这些...
### Hibernate中Example的用法详解 #### 一、前言 ...通过本文的介绍,相信你已经对`Example`的使用有了全面的认识,接下来不妨在实际项目中尝试运用这些技巧,以提高你的Hibernate应用开发水平。
《深入理解Hibernate Synchronizer 3.1.9:整合与优化》 Hibernate Synchronizer是一款...然而,也需要注意,任何自动化工具都不能替代对业务逻辑的理解和对代码质量的把控,开发者仍需保持对项目整体架构的清晰认识。
1. **Hibernate概述**:介绍Hibernate的基本概念,包括它的历史、目标和在Java应用中的地位,以及与JDBC的关系和对比,帮助读者建立对Hibernate的初步认识。 2. **安装与配置**:讲解如何在项目中集成Hibernate,...
Hibernate详细的架构图,很好的架构系统,能全面认识Hibernate。
- 先实践后理论:通过动手实践,建立起对Hibernate的直观认识,然后再深入学习背后的原理。 - 注重注解:随着Java的发展,注解配置逐渐取代XML配置,因此在学习过程中应侧重于注解的使用。 资源: - Hibernate官方...
在IT行业中,Hibernate、Spring和Hibernate ...而"hibernate_reference.pdf"则能让你对Hibernate有更全面的认识,包括其非注解的使用方式。这些知识对于提升Java EE开发技能、优化项目结构和提高开发效率至关重要。
许多有经验的开发人员都有一个共同的认识,那就是Hibernate要比Struts和Spring难掌握得多,初学者要想学好Hiberante就更是难上加难了!本课程的讲解者李勇老师的技术功底非常深厚,课程内容组织得非常合理和巧妙,...
通过这个项目,你可以深入了解ORM的工作原理,提升Java编程技能,并对数据库操作有更深入的认识。同时,这也是一个很好的实践项目,可以帮助你理解框架设计的原则和挑战。在实现过程中,你可能会遇到各种问题,解决...
Hibernate 初认识 Hibernate 的HelloWorld hibernate.cfg.xml 配置详解 *.hbm.xml 对象映射文件详解 Hibernate 核心接口详解 抽取HibernateUtil 工具类 使用Session 接口进行增删改查
10. **实战认识**:通过实例演示如何在实际项目中应用Hibernate。 《hibernate in action》是另一本知名书籍,它通常会提供更深入的技术洞察,可能涵盖以下内容: 1. **Hibernate核心概念**:深入理解Hibernate的...
通过深入研究这个例子,你将对Hibernate的工作流程有清晰的认识,为后续的实际项目开发打下坚实基础。在实践中不断优化和调整,你会发现Hibernate是Java ORM领域的强大工具,能显著提升开发效率。
在Java持久化框架Hibernate中,对象关系模型(Object-Relational Mapping,ORM)是将数据库中的数据映射到Java对象的技术。它使得开发者能够用面向对象的方式来操作数据库,简化了数据库编程的过程。以下是对...
在探讨Hibernate中联合主键的使用时,我们首先需要理解什么是联合主键以及它在Hibernate框架中的实现方式。...开发者在享受其带来的灵活性和功能增强的同时,也需对其潜在的风险有充分的认识和准备。
SSH之Hibernate总结 SSH(Struts、Spring、Hibernate)是Java Web开发中...通过以上内容,你可以对Hibernate有全面的认识,并具备基本的使用能力。继续深入学习,你将能够熟练地运用Hibernate解决实际开发中的问题。
1. Hibernate基本概念:介绍Hibernate的核心思想,如实体、持久化类、对象状态管理、事务处理等,帮助初学者建立对ORM框架的基本认识。 2. Hibernate配置:讲解如何配置Hibernate的XML文件,包括hibernate.cfg.xml...
**Hibernate Query Language(HQL)基础认识** Hibernate Query Language(HQL)是Hibernate框架中用于操作对象关系映射(ORM)的一种查询语言。它类似于SQL,但专为面向对象编程设计,使得开发者能够以类和对象的...
在深入探讨Hibernate框架中Criteria API的使用之前,我们先简要了解一下Hibernate本身。Hibernate是一个开源的对象关系映射(ORM)框架,它简化了Java应用程序与数据库之间的交互过程,通过将对象模型映射到数据库...