Hinernate入门例子

本文详细介绍如何使用Hibernate进行数据库操作,包括项目文件结构搭建、Java持久化类编写、ORM映射及配置文件设置等内容。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1. 建立项目文件系统结构­

HelloWorld

-src­

+lib­

+bin(或者build)­

所需要的包

-lib

antlr-2.7.6.jar
dom4j-1.6.1.jar
hibernate3.jar
javassist-3.9.0.GA.jar
mysql-connector-java-5.0.8-bin.jar (使用Mysql数据库)
slf4j-api-1.5.8.jar
slf4j-simple-1.5.8.jar(或slf4j-jdk14-1.5.8.jar或slf4j-log4j12-1.5.8.jar(兼容之前使用log4j的hibernate版本))

(Hibernate 3.3.2 GA 不再使用log4j, 使用slf4j-Simple Logging Facade for Java )

2. 选择开发方式:­

(1) 从上至下,先根据业务模型设计Java类,然后通过hbm2ddl等工具生成数据库schema, 适合大多数项目开发。­

(2) 从下至上,先设计数据库的schema, 再通过hbm2java等工具生成Java持久类。­

(3) 从中间至上下,由xml文件开始,至上生成Java类, 至下生成schema,适合专家­

(4) 混合模式, 有Java类,又有数据库schema, 比较困难­

选择第一种方式。­

3. 编写Java持久类­

要求:­

(1) 要有有标示符(identifier), 标示符可以为null即不是primitive type­

(2) 要有没有参数的构造方法­

(3) 类不是final的和没有public final的方法,否则会影响hibernate的lazy加载。­

(4) 为fields编写setter和getter方法。­

(5) 如果对象放在Set中或离线后重新在线,重载overriding equals和hashCode方法。­

下面是一个POJO,将使用hibernate保存到数据库中。


package hello;­

import java.util.Date;

public class Event{

private Long id; //identifier­

private String text;­

private Date date;­

private Event nextEvent; ­

public Event() {}­

­

//set方法为私有, id由hibernate管理­

private void setId(){­

this.id=id;­



­

public Long getId(){­

return this.id;­



保存在src/hello/

­

//.....以下fields的setter和getter方法略­


4. ORM映射文件

相应的dtd可以hibernate的src中找到,建议放在项目的src文件夹中

<?xml version="1.0"?>
<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<hibernate-mapping package="hello">
<class name="Event" table="EVENTS">
<id name="id" column="EVENT_ID">
<generator class="native" />
</id>

<property name="text" />
<property name="date" type="timestamp" column="EVENT_DATE" />

<!-- 多对一关系-->
<many-to-one name="nextEvent" column="NEXT_EVENT_ID" />
</class>

</hibernate-mapping>


保存为 src/hello/Event.hbm.xml (也可以保存在src下面)

6. 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">com.mysql.jdbc.Driver</property>
<property name="connection.url">jdbc:mysql://localhost/test</property>
<property name="connection.username">root</property>
<property name="connection.password">197726</property>

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

<!-- SQL Dialect -->
<property name="dialect">org.hibernate.dialect.MySQLDialect</property>

<!-- Enable Hibernate's automatic session 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 recreate the database schema on startup -->
<property name="hbm2ddl.auto">update</property>


<!-- 此处映射文件的路径相对于classpath的根(src目录) -->

<!--如果此处不加入mapping资源,则需要在代码里手工加载-->

<!-- hbm.xml文件位于包路径下 -->
<mapping resource="hello/Event.hbm.xml" />
<!-- hbm.xml文件位于classpath根路径下即src目录 -->
<!-- <mapping resource="Event.hbm.xml" /> -->
</session-factory>
</hibernate-configuration>

将此文件保存为hibernate.cfg.xml在src中。若存为其他名称则需要在Configuration.config()方法中将名称作为参数提供。

7. 实用类HibernateUtil

该类用于方便的获得SessionFactory。SessionFactory为应用程序的全局变量,用于获得Session对象。通常一个SessionFactory对应一个数据库。在hibernate启动时构造一个SessionFactory对象并在整个应用程序共享。SessionFactory对象是线程安全的,并且应该只被初始化一次(即hibernate启动时)。

Session对象是单线程的,代表一批次工作(a unit of work)。


package hello;

import org.hibernate.*;

public class HibernateUtil{

private static SessionFactory sessionFactory;

static{

try{

  sessionFactory=new Configuration().configure();

  //如果配置文件不是默认名称hibernate.cfg.xml

  //sessionFactory=new Configuration().configure("anothername.cfg.xml");

//如果配置文件中没有加入mapping resource

//指定资源在classpath下(即src目录),此时Event.hbm.xml应在src目录下,而不在包路径下,否则会找不到

//sessionFactory=new Configuration().configure().addResource("Event.hbm.xml");

//指定在包路径下寻找Event.hbm.xml

//sessionFactory=new Configuration().configure().addClass("Event.class");

  }

catch(Trowable ex){

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

throw new ExceptionInInitializerError(ex);

}

}

public static SessionFactory getSessionFactory(){

return sessionFactory;

}  

}


8. 运行并测试
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值