Hibernate入门详解
Hibernate是一个开放源代码的对象关系映射框架(orm),它对JDBC进行了非常轻量级的对象封装,Hibernate可以应用在任何使用JDBC的场合,既可以在Java的客户端程序使用,也可以在Servlet/JSP的Web应用中使用,Hibernate是目前Java开发中最为流行的数据库持久层框架,它的设计目标是将软件开发人员从大量相同的数据持久层相关编程工作中解放出来。
下面讲解如何使用hibernate:
需要开发工具:eclipse;需要数据库:mysql
1. 在mysql中建一名为event 的数据库
2.
Create database event;
3. 在该库中建表
create table events(
EVENT_ID integer not null auto_increment primary key,
title varchar(400),
EVENT_DATE timestamp
);
3. 打开eclipse,新建项目,导入相关包,包括:hibernate3.jar和/lib/required里的所有jar包,加上slf4j-nop- 1.5.0.jar和mysql-connector-java-5.0.7-bin.jar.(版本可以不同,下面我有将这些包上传)。
4. 将src解压后copy到项目中去(src压缩文件已上传,解压后需要将hibernate.cfg.xml中
<property name="connection.username">root</property>
<property name="connection.password">a</property>
Root 和 a 分别改为你mysql数据库的用户名和密码。
5. 运行程序,将往数据库中插入一条数据。
代码详解:
1. session
Hibernate的基本特征是完成面向对象的程序设计语言到关系数据库的映射,在Hibernate中使用持久化对象PO(Persistent Object)完成持久化操作,对PO的操作必须在Session管理下才能同步到数据库,但是这里的Session并非指HttpSession,可以理解为基于JDBC的Connnection,Session是Hibernate运作的中心,对象的生命周期、事务的管理、数据库的存取都与Session息息相关。Hibernate在对资料库进行操作之前,必须先取得Session实例,SessionFactory负责创建Session,Session实例由SessionFactory开启获得,Session session = sessionFactory.openSession();开启Session不会马上取得Connection,而是在最后真正需要连接资料库进行更新或查询时才会取得Connection,在Hibernate中,开启一个Session会建立一个Persistence context,它可以进行快取管理、dirty check等,而所有的读取、更新、插入等动作,则是在Transaction中完成。save()之后,不会马上对资料库进行更新,而是在Transaction的commit()之后才会对资料库进行更新,在Transaction之间的操作要就全部成功,要就全部失败,如果更新失败,则在资料库层面会撤消所有更新操作,然而记忆体中的持久物件是不会回复原有状态的,事实上,当 Transaction失败,这一次的Session就要马上跟着失效,放弃所有记忆体中的物件,而不是尝试以原物件再进行更新的动作。
2. configure
return new Configuration().configure().buildSessionFactory();
最常见的使用Configuration方式是:
Configuration cfg = new Configuration().configure();
configure()方法默认会在classpath下面寻找hibernate.cfg.xml文件,如果没有找到该文件,系统会打印如下信息并抛出HibernateException异常
buildSessionFactory()将得到sessionFactory
Hibernate是一个开放源代码的对象关系映射框架(orm),它对JDBC进行了非常轻量级的对象封装,Hibernate可以应用在任何使用JDBC的场合,既可以在Java的客户端程序使用,也可以在Servlet/JSP的Web应用中使用,Hibernate是目前Java开发中最为流行的数据库持久层框架,它的设计目标是将软件开发人员从大量相同的数据持久层相关编程工作中解放出来。
下面讲解如何使用hibernate:
需要开发工具:eclipse;需要数据库:mysql
1. 在mysql中建一名为event 的数据库
2.
Create database event;
3. 在该库中建表
create table events(
EVENT_ID integer not null auto_increment primary key,
title varchar(400),
EVENT_DATE timestamp
);
3. 打开eclipse,新建项目,导入相关包,包括:hibernate3.jar和/lib/required里的所有jar包,加上slf4j-nop- 1.5.0.jar和mysql-connector-java-5.0.7-bin.jar.(版本可以不同,下面我有将这些包上传)。
4. 将src解压后copy到项目中去(src压缩文件已上传,解压后需要将hibernate.cfg.xml中
<property name="connection.username">root</property>
<property name="connection.password">a</property>
Root 和 a 分别改为你mysql数据库的用户名和密码。
5. 运行程序,将往数据库中插入一条数据。
代码详解:
1. session
Hibernate的基本特征是完成面向对象的程序设计语言到关系数据库的映射,在Hibernate中使用持久化对象PO(Persistent Object)完成持久化操作,对PO的操作必须在Session管理下才能同步到数据库,但是这里的Session并非指HttpSession,可以理解为基于JDBC的Connnection,Session是Hibernate运作的中心,对象的生命周期、事务的管理、数据库的存取都与Session息息相关。Hibernate在对资料库进行操作之前,必须先取得Session实例,SessionFactory负责创建Session,Session实例由SessionFactory开启获得,Session session = sessionFactory.openSession();开启Session不会马上取得Connection,而是在最后真正需要连接资料库进行更新或查询时才会取得Connection,在Hibernate中,开启一个Session会建立一个Persistence context,它可以进行快取管理、dirty check等,而所有的读取、更新、插入等动作,则是在Transaction中完成。save()之后,不会马上对资料库进行更新,而是在Transaction的commit()之后才会对资料库进行更新,在Transaction之间的操作要就全部成功,要就全部失败,如果更新失败,则在资料库层面会撤消所有更新操作,然而记忆体中的持久物件是不会回复原有状态的,事实上,当 Transaction失败,这一次的Session就要马上跟着失效,放弃所有记忆体中的物件,而不是尝试以原物件再进行更新的动作。
2. configure
return new Configuration().configure().buildSessionFactory();
最常见的使用Configuration方式是:
Configuration cfg = new Configuration().configure();
configure()方法默认会在classpath下面寻找hibernate.cfg.xml文件,如果没有找到该文件,系统会打印如下信息并抛出HibernateException异常
buildSessionFactory()将得到sessionFactory