Hibernate4 : 持久化你的第一个类

由于目前我在学校的一个实验室跟老师学习Java EE开发,老师用的是Seam框架接活做项目,所以这一系列的文章将会向Seam方向写。。路线大致应该是 : JSP --> Servlet --> Hibernate --> JSF --> EJB3 --> Seam


在开始之前,去www.hibernate.org下载 hibernate4.final.zip ,并将所有依赖的jar文件放到classpath下


一、Hibernate简介

持久化,是指将内存中的数据保存到可以永久存储数据的高设备中,如硬盘。

Hibernate是一个开放源代码的对象关系映射(ORM)框架,它对JDBC进行了轻量级的封闭,使得程序员能从繁杂的JDBC操作中彻底解放出来。Hibernate使用hibernate.cfg.xml完成数据库的配置,使用 *.hbm.xml文件定义从对象到数据库的映射规则。

数据库的配置 : hibernate.cfg.xml

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE hibernate-configuration PUBLIC "-//Hibernate/Hibernate Configuration DTD 3.0//EN"
"http://www.hibernate.org/dtd/hibernate-configuration-3.0.dtd">
<hibernate-configuration>
    <session-factory>
    	<!-- MySql JDBC驱动类 -->
        <property name="hibernate.connection.driver_class">com.mysql.jdbc.Driver</property>
        <!-- MySql DB用户密码 -->
        <property name="hibernate.connection.password">0000</property>
        <!-- MySql 连接URL -->
        <property name="hibernate.connection.url">jdbc:mysql://localhost:3306/test</property>
        <!-- MySql DB用户名 -->
        <property name="hibernate.connection.username">root</property>
        <!-- MySql JDBC方言 -->
        <property name="hibernate.dialect">org.hibernate.dialect.MySQLDialect</property>
        <!-- 在控制台打印自动生成的SQL语句 -->
        <property name="hibernate.show_sql">true</property>
        <!-- 实例Bean映射定义文件 -->
        <mapping resource="dev/entity/UserBean.hbm.xml"/>
    </session-factory>
</hibernate-configuration>


<mapping resource="dev/entity/UserBean.hbm.xml"/>是指定映射规则文件的路径。UserBean.hbm.xml定义了从UserBean这个类到关系数据库的映射规则。该文件应该放在与UserBean.class 同级的目录下。UserBean这个实例bean定义如下:

package dev.entity;

public class UserBean
{
	private int id; //用做主键
	private String name;
	private String pwd;
	
	//省略get和set方法
}


我们要做的就是将UserBean这个类存储到数据库的一张名叫USERBEAN的表中。UserBean的每个属性都对应着数据表中的一个字段。首先创建USERBREAN数据表:

create table USERBEAN
(
	ID int key auto_increment,
	NAME varchar(40),
	PWD varchar(40)
);

注意,主键 ID字段必须设置成auto_increment,即自增类型。下面通过UserBean.hbm.xml来定义从类到数据库的映射规则。

<?xml version="1.0"?>
<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<!-- Generated Jun 29, 2013 2:13:53 PM by Hibernate Tools 3.4.0.CR1 -->
<hibernate-mapping>
    <class name="dev.entity.UserBean" table="USERBEAN">
        <id name="id" type="int">
            <column name="ID" />
            <generator class="native" />
        </id>
        <property name="name" type="java.lang.String" length="40">
            <column name="NAME" />
        </property>
        <property name="pwd" type="java.lang.String" length="40">
            <column name="PWD" />
        </property>
    </class>
</hibernate-mapping>


关于这些xml文件的说明,可以查看官方文档。上面的xml应该很容易理解,如table属性指的就是表名,id元素定义了主键等等。这里不再说明


好了,一切准备就绪,下面就开始持久化我们的第一个类吧!


二、使用Hibernate持久化类的流程

构造Configuration对象 --> 构造ServiceRegistry对象 --> 得到SessionFactory对象 -->使用SessionFactory得到Session对象。

得到Session对象后,首先要调用beginTransaction()方法来打开一个事务,然后调用save()方法将UserBean的实例做为参数传递进去,再调用Transaction的commit()方法提交事务,这时候UserBean对象才会被保存到数据库中。如果调用完save()方法后没有调用commit(),则不会进行任何的保存工作,只有当事务关闭或者调用了flush方法后才会真正地将对象持久化。

package dev;

import java.rmi.registry.Registry;

import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.cfg.Configuration;
import org.hibernate.service.ServiceRegistry;
import org.hibernate.service.ServiceRegistryBuilder;

import dev.entity.*;

public class Main
{

	/**
	 * @param args
	 */
	public static void main(String[] args)
	{
		// TODO Auto-generated method stub
		Configuration cfg = new Configuration().configure(); //加载配置文件
		ServiceRegistry registry = new ServiceRegistryBuilder().applySettings(cfg.getProperties())
				.buildServiceRegistry(); //在得到SessionFactory之前要先进行注册,Hibernate4新特性
		
		SessionFactory factory = cfg.buildSessionFactory(registry);
		Session session = factory.openSession(); //开启一个session
		
		//填充实例bean
		UserBean user = new UserBean();
		user.setId(1);
		user.setName("bruce");
		user.setPwd("1234567");
		
		session.beginTransaction(); //开始一个事务
		session.save(user); //保存实例对象
		session.getTransaction().commit(); //提交事务,user会被持久化
		session.close();
	}

}


注意,如果使用的是Hibernate3或之前的版本,则不需要注册这一步,即main方法中第二行代码可以省略,cfg.buildSessionFactory()方法不需要参数。


运行程序,持久化完成。



原文地址:https://www.cnblogs.com/dyllove98/p/3162842.html