作为第一篇关于Hibernate的总结博文,简要说一下Hibernate的基本结构:

        “Hibernate,是一个开放源代码的对象关系映射框架(ORM),它对JDBC进行了非常轻量级的对象封装,使得Java程序员可以随心所欲的使用对象编程思维来操纵数据库。 Hibernate可以应用在任何使用JDBC的场合,可以大幅度减少开发时人工使用SQL和JDBC处理数据的时间。Hibernate的目标主要是用于与数据持久化相关的编程任务,能够使开发人员从原来枯燥的SQL语句的编写中解放出来,解放出来的精力可以让开发人员投入到业务逻辑的实现上。Hibernate可以帮助用户消除或者包装那些针对特定厂商的SQL代码,并且帮用户把结果集从表格式的表示形式转换成一系列的对象。”

        从下图可以看出,Hibernate处于中间部位,把Application传过来的Persistent持久化对象通过Hibernate核心配置文件和基本映射文件,持久化处理到数据库Database中。


       Hibernate框架如下图:其中Persistence Layer属于Hibernate范畴。

下面是一个应用Hibernate生成表结构及INSERT一条记录的实例:

       1. 搭建Hibernate实验环境 需要引入Hibernate下的核心包hibernate3.jar 、依赖包即 \lib 文件夹下的所有jar文件 、mysql驱动包 、Hibernate核心配置文件 hibernate.cfg.xml 。

       2.在IDE中根据设计的User实体类,编写映射文件User.hbm.xml

       -------User.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">
<hibernate-mapping >

<class name="com.jzg.hibernate.User">
	<id name="id" column="t_user_id"><!-- 属性列的重命名 user_id -->
		<generator class="uuid"></generator><!-- 主键生成策略 -->
	</id>
	<property name="name"></property>
	<property name="password"></property>
	<property name="createTime"></property>
	<property name="expireTime"></property>
</class>	
</hibernate-mapping>

       3.在Hibernate核心配置文件hibernate.cfg.xml中添加User实体类映射文件信息。

       ------hibernate.cfg.xml

<!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.connection.driver_class" >com.mysql.jdbc.Driver
</property>
		<property name="hibernate.connection.url">jdbc:mysql://localhost:3306/hibernate_first</property>
		<property name="hibernate.connection.username">root</property>	
<property name="hibernate.connection.password">jzg</property>
		<property name="hibernate.dialect">org.hibernate.dialect.MySQLDialect
</property>
		<property name="hibernate.show_sql">true</property>
<!—在这里指定相应实体映射文件,此为路径 文件-->	
		<mapping resource="com/jzg/hibernate/User.hbm.xml"/>
	</session-factory>
</hibernate-configuration>

 

   注意映射文件的存放位置:

 

    4.事先通过mysql  command  line 生成database。

    5. 在配置好基本文件后,编写ExportDBUtil类,执行生成表结构。

       ------ExportDBUtil.class

public class ExportDBUtil {
	public static void main(String[] args){
		
		//默认读取hibernate.cfg.xml文件
		Configuration cfg = new Configuration().configure();
		SchemaExport export = new SchemaExport(cfg);
		export.create(true, true);
	}
}
-----print执行结果
drop table if exists User
11:03:56,732  WARN JDBCExceptionReporter:48 - SQL Warning: 1051, SQLState: 42S02
11:03:56,732  WARN JDBCExceptionReporter:49 - Unknown table 'user'
create table User (t_user_id varchar(255) not null, name varchar(255), password varchar(255), createTime datetime, expireTime datetime, primary key (t_user_id))
11:03:56,812  WARN JDBCExceptionReporter:48 - SQL Warning: 1051, SQLState: 42S02
11:03:56,812  WARN JDBCExceptionReporter:49 - Unknown table 'user'

       6. 通过Hibernate中的Session对象 执行save()方法继而将实例持久化存入数据库,save()方法封装了我们以前要写的INSERT 语句。这里也基本能看出Hibernate把数据库操作等进行对象化封装,简单易操作,只要整理好需要持久化的对象,其他的和数据库操作的东西交给Hibernate去做吧。

      ------Client.class

public class Client {
	public static void main(String[] args) {
		//用Hibernate读取数据表,需要借助配置文件
		//读取配置文件
		Configuration cfg = new Configuration().configure();
		
		//建立SessionFactory,然后就可以访问mysql了
		SessionFactory factory = cfg.buildSessionFactory();

		//取得session,session是一种用于管理数据库操作的对象。		
		Session session = null;
		try{
			//打开session
			session = factory.openSession();
			//开启事务
			session.beginTransaction();
			User user = new User();
			user.setName("zhangsan");
			user.setPassword("123456");
			user.setCreateTime(new Date());
			user.setExpireTime(new Date());
			
			//保存user对象到数据库中,以记录形式存储
			session .save(user);
			
			//提交事务
			session.getTransaction().commit();
			
		}catch( Exception e){
			e.printStackTrace();
			//回滚事务
			session.getTransaction().rollback();
			
		}finally{
			
			if(session != null){
				if(session.isOpen()){
					//关闭session
					session.close();
				}
			} 
		}
	}
}

 

 

附:NHibernate一个Hibernate胞弟一样的存在。

       NHibernate:一个基于Java Hibernate的.NET平台下对象/关系数据库映射工具. 功能性和Hibernate是一样一样滴,但目前不如Hibernate应用范围广。

       框架图: