`
ganshisheng
  • 浏览: 42513 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

Hibernate 入门----第一个Hibernate应用程序

阅读更多
(可参考Hibernate中文文档--附件下载)
第一个Hibernate应用程序


一、首先我们将创建一个简单的基于控制台的(console-based)Hibernate应用程序。

我们所做的第一件事就是把所有需要用到的Java库文件放进开发的目录中。解压缩从Hibernate网站下载的Hibernate发布包,并把库文件拷到我们新建开发目录下的/lib目录下。看起来就像这样:
.
+lib
  antlr.jar
  cglib.jar
  asm.jar
  asm-attrs.jars
  commons-collections.jar
  commons-logging.jar
  ehcache.jar
  hibernate3.jar
  jta.jar
  dom4j.jar


假设我们希望有一个小应用程序可以保存和查询events(活动)。

接下来我们创建一个类,用来代表那些我们希望储存在数据库里的event。


二、第一个class

我们的第一个持久化类是一个带有一些属性(property)的简单JavaBean类:

package events;

import java.util.Date;

public class Event {
    private Long id;

    private String title;
    private Date date;

    public Event() {}

    // ...getter/setter省略
}


把这个Java源代码文件放到开发目录下的src目录里,注意包位置要正确。 现在这个目录看起来应该像这样:

.
+lib
  <Hibernate and third-party libraries>
+src
  +events
    Event.java


下一步,我们把这个持久化类的信息告诉Hibernate。


三、映射文件
Hibernate需要知道怎样去加载(load)和存储(store)持久化类的对象。这正是Hibernate映射文件发挥作用的地方。映射文件告诉Hibernate它,应该访问数据库(database)里面的哪个表(table)及应该使用表里面的哪些字段(column)。 

我们在映射文件里面包含需要持久化属性的声明。默认情况下,类里面的属性都被视为非持久化的:

<hibernate-mapping>

    <class name="events.Event" table="EVENTS">
        <id name="id" column="EVENT_ID">
            <generator class="native"/>
        </id>
        <property name="date" type="timestamp" column="EVENT_DATE"/>
        <property name="title"/>
    </class>

</hibernate-mapping>


把这个映射文件保存为Event.hbm.xml,放在EventJava类的源文件目录下。映射文件可随意地命名,但hbm.xml的后缀已成为Hibernate开发者社区的约定。现在目录结构看起来应该像这样:

.
+lib
  <Hibernate and third-party libraries>
+src
 +events
  Event.java
  Event.hbm.xml


我们继续进行Hibernate的主要配置。 


四、Hibernate配置
现在我们已经有了一个持久化类和它的映射文件,该是配置Hibernate的时候了。在此之前,我们需要一个数据库。在这里,我们使用MySQL数据库, 你只需下载 mysql-connector-java-3.1.1-alpha-bin.jar文件,并把这个文件放在开发文件夹的lib/目录下即可。 

Hibernate是你的应用程序里连接数据库的那层,所以它需要连接用的信息。连接是通过一个也由我们配置的JDBC连接池(connection pool)来完成的。注意,如果你希望使用其他的第三方连接池软件,你必须拷贝所需的库文件到你的classpath下,并使用不同的连接池设置。

为了保存Hibernate的配置,我们可以使用一个简单的hibernate.properties文件,或者一个稍微复杂的hibernate.cfg.xml,甚至可以完全使用程序来配置Hibernate。多数用户更喜欢使用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.gjt.mm.mysql.Driver</property>
        <property name="connection.url">jdbc:mysql://localhost:3306/test?useUnicode=true&amp;characterEncoding=utf8&amp;useServerPrepStmts=false</property>
        <property name="connection.username">root</property>
        <property name="connection.password">root</property>

        <!-- JDBC connection pool (use the built-in) -->
        <property name="connection.pool_size">1</property>

        <!-- SQL dialect -->
        <property name="dialect">org.hibernate.dialect.MySQLDialect</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>

        <mapping resource="events/Event.hbm.xml"/>

    </session-factory>

</hibernate-configuration>


把这个文件拷贝到源代码目录下面,这样它就位于classpath的根目录(/src/)的最后。Hibernate在启动时会自动在classpath的根目录查找名为hibernate.cfg.xml的配置文件。


五、启动和辅助类
我们启动Hibernate时要创建一个全局的SessoinFactory,SessionFactory可以创建并打开新的Session。一个Session代表一个单线程的单元操作,SessionFactory则是个线程安全的全局对象,只需要被实例化一次。

我们将创建一个HibernateUtil辅助类(helper class)来负责启动Hibernate和更方便地操作SessionFactory。让我们来看一下它的实现:

package util;

import org.hibernate.*;
import org.hibernate.cfg.*;

public class HibernateUtil {

    private static final SessionFactory sessionFactory;

    static {
        try {
            // Create the SessionFactory from hibernate.cfg.xml
            sessionFactory = 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;
    }

}

这个类不但在它的静态初始化过程(仅当加载这个类的时候被JVM执行一次)中产生全局的SessionFactory,而且隐藏了它使用了静态singleton的事实。它也可能在应用程序服务器中的JNDI查找SessionFactory。

把HibernateUtil.java放在开发目录的源代码路径下,与放events的包并列:
.
+lib
  <Hibernate and third-party libraries>
+src
  +events
    Event.java
    Event.hbm.xml
  +util
    HibernateUtil.java
  hibernate.cfg.xml


示例的基本框架完成了 - 现在我们可以用Hibernate来做些真正的工作。

六、加载并存储对象
我们终于可以使用Hibernate来加载和存储对象了,编写一个带有main()方法的EventManager类:

package events;
import org.hibernate.Session;

import java.util.Date;

import 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());
        }
	else if (args[0].equals("list")) {
	    List events = mgr.listEvents();
	    for (int i = 0; i < events.size(); i++) {
	    Event theEvent = (Event) events.get(i);
	    System.out.println("Event: " + theEvent.getTitle() +
                           " Time: " + theEvent.getDate());
    }
}

        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();
    }
    private List listEvents() {

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

	session.beginTransaction();

	 List result = session.createQuery("from Event").list();

	 session.getTransaction().commit();

	 return result;
    }

}

可以在Eclipse执行Open Run Dialog...键入不同的Arguments运行不同的操作。

我们创建了个新的Event对象并把它传递给Hibernate。现在Hibernate负责与SQL打交道,并把INSERT命令传给数据库。在运行之前,让我们看一下处理Session和Transaction的代码。

sessionFactory.getCurrentSession()是干什么的呢?首先,只要你持有SessionFactory(我们通过HibernateUtil,可以随时获得),大可在任何时候、任何地点调用这个方法。getCurrentSession()方法总会返回“当前的”工作单元。

Session在第一次被使用的时候,即第一次调用getCurrentSession()的时候,其生命周期就开始。然后它被Hibernate绑定到当前线程。当事务结束的时候,不管是提交还是回滚,Hibernate会自动把Session从当前线程剥离,并且关闭它。假若你再次调用getCurrentSession(),你会得到一个新的Session,并且开始一个新的工作单元。这种线程绑定的编程模型(model)是使用Hibernate的最广泛的方式,因为它支持对你的代码灵活分层。

简单地搭建Hibernate、并完成配置至此结束!

(可参考Hibernate中文文档)
分享到:
评论

相关推荐

    hibernate入门--第一个实例

    【hibernate入门--第一个实例】 Hibernate 是一个强大的对象关系映射(ORM)框架,它为Java开发者提供了方便的数据持久化服务。通过使用Hibernate,我们可以将数据库操作转换为对Java对象的操作,从而简化了数据库...

    图书:Hibernate入门 - 第二版

    《Hibernate入门 - 第二版》是一本专注于Java领域持久化技术的书籍,主要围绕开源ORM框架Hibernate进行深入讲解。Hibernate是Java开发中最流行的Object-Relational Mapping(对象关系映射)工具之一,它极大地简化了...

    Hibernate入门 - 基础配置详细说明

    本文将深入探讨Hibernate入门时的基础配置,帮助初学者更好地理解和使用该框架。 首先,Hibernate 配置文件有两种形式:`hibernate.properties` 和 `hibernate.cfg.xml`。尽管两者都可以用于定义配置,但在处理`hbm...

    Hibernate入门-搭建框架实现基本的增删改查(源码)

    Hibernate 是一个开源的对象关系映射(ORM)框架,它简化了Java应用程序与数据库之间的交互。在本教程中,我们将深入理解Hibernate的基本概念,并通过实例演示如何搭建框架来实现数据的增删改查操作。 **一、...

    hibernate5--1.入门及核心API

    Hibernate 是一个开源的Java对象关系映射(ORM)框架,它允许开发者在Java应用中使用面向对象的方式来操作数据库。Hibernate 5是其最新版本,带来了许多改进和优化,提升了性能和用户体验。本文将深入探讨Hibernate ...

    hibernate教程-从入门到精通-第4篇(共四篇)共2

    【hibernate教程-从入门到精通-第4篇(共四篇)共2】这篇教程是关于Java持久层框架Hibernate的学习指南,旨在帮助初学者深入理解并掌握Hibernate的核心概念和技术。Hibernate作为一款强大的对象关系映射(ORM)工具,...

    hibernate入门小程序

    **hibernate入门小程序** Hibernate 是一款开源的对象关系映射(ORM)框架,它为Java开发者提供了方便的数据持久化服务,使得开发人员可以使用面向对象的方式来操作数据库,而无需过多地关注SQL语句的编写。在...

    hibernate入门小例子

    【hibernate入门小例子】是一个适合初学者的教程,主要涵盖了如何在JavaWeb项目中使用Hibernate框架与MySQL数据库进行集成。在这个例子中,我们将会深入理解Hibernate的核心概念,包括实体映射、对象关系映射(ORM)...

    Hibernate入门(代码+笔记)

    **第一部分:Hibernate入门** 这部分主要介绍了Hibernate的基本概念和安装配置。Hibernate基于Java Persistence API(JPA),它提供了对象关系映射(ORM)功能,将Java类映射到数据库表。首先,你需要下载Hibernate...

    hibernate入门

    Hibernate 提供了两级缓存:第一级缓存是Session级别的,自动管理;第二级缓存可配置为应用程序范围,如EhCache、Infinispan等。 ### 十、实体关系映射 Hibernate 支持多种对象关系映射,如一对一、一对多、多对一...

    《Hibernate入门与提高》------讲解详细,容易理解

    这个应用程序将用于存储感兴趣的活动(events)以及活动主办方的信息。首先,读者需要创建一个开发目录,并将Hibernate发行版中/lib目录下的所有必需库文件复制到新目录的/lib子目录中。这些库文件包括antlr.jar、...

    hibernate3入门

    - **第一个Hibernate程序**:最简单的示例是将一个Java对象映射到数据库中的一个表。这通常涉及到定义对象与表之间的映射关系。 - **配置Hibernate**:配置是使用Hibernate的关键步骤之一,包括设置数据库连接参数、...

    hibernate-reference-3.1.1.pdf

    首先,文档通过“第一个Hibernate应用”这一章节,让读者了解如何创建一个持久化类,定义映射文件,并配置Hibernate。这部分内容涵盖了从构建项目环境(如使用Ant进行构建),到启动和使用助手类进行对象加载与存储...

    Beginning-Hibernate-2nd-Edition.pdf

    Hibernate 是一个开放源代码的对象关系映射(ORM)框架,用于 Java 应用程序中简化数据库交互。它允许开发者将 Java 对象映射到关系型数据库中的表,并支持各种复杂的数据检索功能。通过使用 Hibernate,开发人员...

    hibernate人生中第一个成功及完美程序(适合入门者)

    在这个“hibernate人生中第一个成功及完美程序”中,我们将深入探讨Hibernate的基本概念、核心功能以及如何构建一个简单的示例应用。 一、Hibernate概述 Hibernate是一个开源的ORM框架,它的主要任务是将Java对象与...

    Hibernate 手册 第一章 Hibernate入门

    《Hibernate 手册 第一章 Hibernate入门》 Hibernate 是一个开放源码的Java持久化框架,它为Java开发者提供了一种对象关系映射工具来管理Java应用中的关系数据。本章将带你逐步走进Hibernate的世界,了解其基本概念...

    Hibernate 3.6.3 入门程序

    1. **对象关系映射(ORM)**:Hibernate的主要目标是消除Java应用程序与关系数据库之间的繁琐交互。ORM允许我们将数据库表映射到Java类,而数据库记录映射到类的实例,从而在Java对象和数据库之间建立桥梁。 2. **...

    struts2.0 spring2.0 hibernate3.0整合开发快速入门-3

    - **定义**: Struts2是Apache基金会下的一个开源项目,它是一个基于Java EE平台的MVC框架,用于简化Web应用程序的开发。 - **特点**: - 高度灵活的配置性; - 强大的拦截器机制; - 支持多种视图技术(如JSP、...

Global site tag (gtag.js) - Google Analytics