Hibernate入门篇——第一个Hibernate应用

Hibernate入门

第一步:

挑选jar包

在工程下新建lib文件夹,然后将Hibernate基本包复制进去。可以采用Maven来获取这些包:

<dependency>
        <groupId>org.hibernate</groupId>
        <artifactId>hibernate-core</artifactId>
        <version>4.2.7.Final</version>
</dependency>

也可以从Hibernate官网(http://hibernate.org/orm/)下载Hibernate的压缩包

解压后,找到lib文件夹,其中required文件夹下的是必须的jar包,也是Hibernate最小运行时的包。复制其中的所有的jar文件到工程lib目录下。然后add path。

如图:

这样,Hibernate就可以工作了。

最后,别忘了将数据库连接jar包也添加到path下面,不然无法连接到数据库。此处使用的是MySQL数据库,所以找到mysql-connector-java-commercial-5.1.25-bin.jar,将其加入到工程path中。

第二步:

建立第一个java class

假如我们需要做一个简单的小程序来保存我们希望参加的活动(events)和这些活动的主办方信息。

package net.fantesy84.domain;

import java.util.Date;

public class Events {
    private Long id;
    private String title;
    private Date date;

    public Events() {}

    public Long getId() {
        return id;
    }

    public void setId(Long id) {
        this.id = id;
    }

    public String getTitle() {
        return title;
    }

    public void setTitle(String title) {
        this.title = title;
    }

    public Date getDate() {
        return date;
    }

    public void setDate(Date date) {
        this.date = date;
    }

}

这是一个标准的JavaBean,有一个空构造,所有的成员变量为私有,提供了共有的访问方法(setter & getter)。事实上,Hibernate可以直接访问这些私有的变量,但是使用访问方法更利于重构时程序的健壮性。

为了使用反射机制来实例化这个类,需要一个空构造。此处的空构造可以显示的写出来,也可以不写,因为默认构造器就是一个空构造。

另外,对于一个特定的Events实例,id属性保存其唯一性的标识符(identifier)的值。一般来说,我们不会去操作这个id属性,所以通常来说都会将它的setter方法的访问级别设置为private。当然,视具体情况而定,Hibernate对于setter或者getter的访问级别都是可以忽略的,所以用哪种访问级别取决于你的程序设计。

第三步:

映射文件

Hibernate需要知道怎么加载和保存这些需要持久化的类,所以,我们需要一个将类的成员变量与数据库表中的字段进行对应的关系用一个文件来描述,这个文件就是映射文件。

<?xml version="1.0"?>
<!DOCTYPE hibernate-mapping PUBLIC
    "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
    "http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd">

<hibernate-mapping>
    <class name="net.fantesy84.domain.Events" table="T_EVENTS">
        <id name="id">
            <column name="EVENTS_ID">
                <!-- 字段说明 -->
                <comment>活动ID</comment>
            </column>
            <!-- 主键生成策略 -->
            <generator class="native" />
        </id>
        <property name="title" type="java.lang.String">
            <!-- 字段名称以及长度 -->
            <column name="EVENTS_TITLE" length="100">
                <comment>活动标题</comment>
            </column>
        </property>
        <property name="date" type="timestamp">
            <!-- 字段名称以及长度 -->
            <column name="EVENTS_DATE">
                <comment>活动时间</comment>
            </column>
        </property>
        <property name="address" type="string">
            <!-- 字段名称以及长度 -->
            <column name="EVENTS_ADDRESS" length="255">
                <comment>活动地点</comment>
            </column>
        </property>
    </class>
</hibernate-mapping>

Events.hbm.xml

Hibernate的DTD文件是不会从网上加载的,它首先在应用程序的classpath下面查找,DTD文件包含在core包中。上述映射文件只是一个非常简单的映射文件,事实上,映射文件是非常复杂的,它与数据库的设计以及你java类的设计息息相关。

映射文件的命名一般要求是:类名.hbm.xml,映射文件一般与Java类放在同一个包下,这是开发者社区的约定。当然,映射文件可以随意命名,位置也可以随意放置。

在映射文件中,<id>元素是标识符属性的声明,name="id"指定了java类中属性的名字,Hibernate会使用其对应的setter和getter方法来访问它。

<column>元素指定了这个java属性对应数据库中哪一个字段名;

<generator>元素指定了主键的生成策略,策略有多种,具体的会在以后讲到。

除了<id>元素外,普通的成员变量可以用<property>元素来进行声明。方式与声明主键类似,要注意的是,声明普通属性的时候,除了指定属性名(name="title")外,还需要指定这个属性的数据类型,这样Hibernate才能知道从java类到数据库表,或者从数据库表到java类之间进行转换时,相应的字段或者属性应该以哪种数据类型进行转换。

type属性指定的数据类型,可以不写,由Hibernate自动检测,例如上述映射文件中的date属性和address属性,我们没有明确的指定它们的java类型,而是使用了Hibernate提供的类型转换器。这样,Hibernate就可以为我们进行自动转换。

添加了jar包,有了java类和映射文件,我们就已经做完了Hibernate的准备工作,接下来就是Hibernate的配置工作了。

第四步:

Hibernate配置文件(hibernate.cfg.xml)

Hibernate为了保存配置,可以使用一个简单的Properties文件进行信息保存,也可以使用XML的方式。多数开发者喜欢使用XML。一般都会将Hibernate的配置文件命名为hibernate.cfg.xml并放置在classpath下。当然,你也可以随意命名和随意放置。

一个简单的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>
        <!-- 指定数据库方言 -->
        <property name="hibernate.dialect">org.hibernate.dialect.MySQL5Dialect</property>
        <!-- 指定数据库连接驱动 -->
        <property name="hibernate.connection.driver_class">com.mysql.jdbc.Driver</property>
        <!-- 指定数据库连接URL -->
        <property name="hibernate.connection.url">jdbc:mysql://localhost:3306/test</property>
        <!-- 显示SQL语句 -->
        <property name="hibernate.show_sql">true</property>
        <!-- 指定数据库用户名和密码 -->
        <property name="hibernate.connection.username">root</property>
        <property name="hibernate.connection.password">**</property>

        <!-- 添加映射文件 -->
        <mapping resource="net/fantesy84/domain/Events.hbm.xml"/>
    </session-factory>
</hibernate-configuration>

hibernate.cfg.xml

配置文件中,指定了一个session-factory,它关联一个特定的数据库全局工厂,如果你要配置多个数据库,则需要配置多个session-factory。

将第三步中写好的映射文件添加到配置文件中,XML的写法和注解的写法稍有不同,建议初学者使用XML。

有了上述文件,我们就可以使用Hibernate对Events类进行持久化操作了。在这之前,还需要一些基础代码,例如一个辅助类HibernateUtils

package net.fantesy84.util;

import org.hibernate.HibernateException;
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.boot.registry.StandardServiceRegistryBuilder;
import org.hibernate.cfg.Configuration;

public class HibernateUtils {
    private static SessionFactory sessionFactory = null;
    private static Session session = null;
    private static HibernateUtils h;
    private static final ThreadLocal<Session> s = new ThreadLocal<Session>();

    private HibernateUtils() {
        try {
            sessionFactory = new Configuration().configure()
                    .buildSessionFactory(
                            new StandardServiceRegistryBuilder().build());
        } catch (HibernateException e) {
            e.printStackTrace();
        }
    }

    /**
     * 饥汗单例对象获取方法
     *
     * @return HibernateUtils insatance
     */
    public static HibernateUtils getInstance() {
        if (h == null) {
            return new HibernateUtils();
        } else {
            return h;
        }
    }

    /**
     * 获取Session方法
     *
     * @return session对象
     */
    public Session getSession() {
        session = s.get();
        if (session == null) {
            session = sessionFactory.openSession();
            s.set(session);
        }
        return session;

    }

    /**
     * 获取CurrentSession方法
     *
     * @return session对象
     */
    public Session getCurrentSession() {
        session = s.get();
        if (session == null) {
            session = sessionFactory.getCurrentSession();
            s.set(session);
        }
        return session;
    }
    /**
     * 关闭Session
     */
    public void close(){
        session.close();
    }
}

HibernateUtils

至此,Hibernate已经可以正常工作了。这里使用了Hibernate 4.3.5.Final,可进行自动建表,也可在配置文件(hibernate.cfg.xml)中显式的配置

<property name="hibernate.hbm2ddl.auto">true</property>来进行建表操作。

下一篇,阐述简单的Hibernate对Java类的持久化操作。

Hibernate入门篇——第一个Hibernate应用

时间: 2024-10-12 18:11:10

Hibernate入门篇——第一个Hibernate应用的相关文章

Hibernate入门篇&lt;1&gt;hibernate.cfg.xml学习小结

Hibernate配置文件主要用于配置数据库连接和Hibernate运行时所需的各种属性,这个配置文件应该位于应用程序或Web程序的类文件夹 classes中.Hibernate配置文件支持两种形式,一种是xml格式的配置文件,另一种是Java属性文件格式的配置文件,采用"键=值"的形式.建议采用xml格式的配置文件,xml配置文件可以直接对映射文件进行配置,并由Hibernate自动加载,而properties文件则必须在程序中通过编码加载映射文件. 一)hibernate配置文件模

Hibernate入门篇

下面以Hibernate官方站点提供的HibernateTools作为插件来开发Hibernate应用: 1,下载安装HibernateTools: 2,新建工程,添加类库 1>Mysql驱动: 2>hibernate-release-4.3.10.Final\lib\required下的10个jar包: 3> hibernate-release-4.3.10.Final\lib\optional\c3p0下的3个jar包: 3,创建hibernate.cfg.xml文件 <?xm

【转】C# 串口操作系列(1) -- 入门篇,一个标准的,简陋的串口例子。

我假设读者已经了解了c#的语法,本文是针对刚打算解除串口编程的朋友阅读的,作为串口编程的入门范例,也是我这个系列的基础. 我们的开发环境假定为vs2005(虽然我在用vs2010,但避免有些网友用2005,不支持lambda,避免不兼容,就用2005来做例子) 一个基本的串口程序,既然是个程序了.我们就先从功能说起,包含 串口选择 波特率选择 打开 关闭 接受数据显示 发送数据输入 发送数据 数据量提示以及归零 好吧,有了这些功能,我们就先画出界面.例如: 这里,波特率就定死几种好了.直接界面上

hibernate入门(一)——hibernate的优劣对比

hibernate是一种是轻量级的ORMapping框架.学过EntityFramework的,会感觉挺亲切的. 对于各种层次程序员对数据库的设计: 小菜程序猿这样做:首先考虑数据的存储,对于功能的实现,如何方便如何来.至于说冗余神马的,不予考虑. 资深程序猿这样做:首先设计数据库的关系模型,用工具画画ER图,或者画一下物理模型.考虑一下关系模型.好点儿的懂得利用工具,把设计好的模型转换成数据库脚本.然后扔数据库里.然后,在功能实现过程中,对于难以实现的功能,算啦,还是修改一下数据库.这样好做多

iOS-----openGL--openGL ES iOS 入门篇2---&gt;绘制一个多边形

在上一篇我们学习了如何搭建IOS下openGL的开发环境,接下来我们来学习如何绘制一个多边形. 在2.0之前,es的渲染采用的是固定管线,何为固定管线,就是一套固定的模板流程,局部坐标变换 -> 世界坐标变换 ->观察坐标变换->背面消除->光照->裁剪->投影->视口计算->光栅化,程序员只需要调用固定的api修改一些配置参数就可以完成整个渲染流程了.而到了2.0,固定管线改成了可编程管线,我们对整个渲染流程可以再编程,没有固定的api给你调用,一切都依靠

Android 开发基础入门篇: 复制一个工程作为一个新的工程

说明 咱们做项目很多时候都需要复制一份工程出来作为一个新的工程 把第一节的工程拷贝到这一节 修改工程名字 打开软件导入此工程 修改包名 第一节的时候说了,一个APP一个包名 自行添加修改 自行修改 自行修改 选择 Sync Now 清理下工程 然后安装到手机 原文地址:https://www.cnblogs.com/yangfengwu/p/11909225.html

Hibernate入门教程

上一章我们学了一下Hibernate的配置和单张表的操作,这一章说一下Hibernate中一对一的配置 Hibernate入门教程 第二章 Hibernate的一对一单边双边配置.以及增删改查 预备知识: 1.fetch ,可以设置fetch = "select" 和 fetch = "join" fetch ="select"是在查询的时候先查询出一端的实体,然后在根据一端的查询出多端的实体,会产生1+n条sql语句; fetch = &quo

Hibernate 入门教程(总结)

在前面4篇文章,我把Hibernate中的常规配置.单张表操作.一对一单双边配置.一对多.多对一单双边配置.多对多单双边配置及数据库操作都讲了一遍,如果有的地方说错了或者不明白的地方,还请大家指正.我再把几篇文章的地址发一下,方便大家查阅 一.Hibernate入门教程 第一章Hibernate的简单配置.单张表的增删改查操作(student为例) 地址:http://blog.csdn.net/zhangpan19910604/article/details/46654233 二.Hibern

【Hibernate那点事儿】—— Hibernate应该了解的知识

前言: 最近由于有点时间,就像深入的学习一下Hibernate.之前只是简单的使用,并没领会它的妙处.这里就趁着分享的机会,好好整理一下. 这篇主要讲到了下面几个部分: Hibernate框架 Hibernate发展背景 Hibernate使用介绍 Hibernate Tools安装 Hibernate那些必要的包 首先说一下,这个Hibernate是做什么的.Hibernate官网上面罗列了它的基本框架 我们最常用的应该就是Hibernate ORM了.下面简单的说下几个框架的作用: Hibe