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()方法不需要参数。

 


运行程序,持久化完成。

Hibernate4 : 持久化你的第一个类


 

你可能感兴趣的:(Hibernate4)