Hibernate开发环境建立和第一个程序
Hibernate是一个优秀的开源ORM框架,就是符合Java语言习惯的关系型数据库持久化方案。目前主流数据库还都是关系数据库,也就是二维表结构,而Java语言是面向对象的语言,程序中操纵的是对象,那么刻画对象的一组数据怎样存入数据库?这就是Hibernate要完成的工作-对象数据的持久化。当然,持久化可以是写入文件系统也可以是写入数据库,而大规模数据存取时,程序直接IO的效率和易用性,可维护性显然都不如数据库好,所以使用数据库还是趋势。
Hibernate的官方网站是http://www.hibernate.org,要使用Hibernate当然要下载开发包,作为学习,只下载核心包core即可。当前版本是3.3.2-GA。
开发包下documentation中有帮助手册,也有中文的,这个中文只是简单翻译的,但是可以省去我们查找目录的时间了,Hibernate的帮助手册写的还是不错的。
既然要使用Java语言进行数据库操作,JDBC是必不可少的,Hibernate也是建立在JDBC API之上的,其本质还是JDBC,所以碰到Hibernate无法完成的工作,还应直接使用JDBC,任何东西都不是万能的。知道了本质,那么和数据库交互还需要对应的数据库驱动程序。
准备好这些东西后,我们就可以着手搭建Hibernate的开发环境了。解压缩Hibernate的开发包,在其根目录下的hibernate3.jar是必须的。打开lib目录,required中是hibernate所依赖的类库,需要全部使用。在bytecode中的cglib也是需要的,不要忘了,关于这些类库的作用这里还是不解释了。准备好后,就可以在Eclipse中搭建开发环境了。
建立普通的java工程就可以了,单机学习测试就够了。类库如图,版本可不同,这是最少的需求了。Hibernate配置文件hibernate.cfg.xml建议放置到类路径的根目录下,包的结构可以根据自己喜好,这里domain表示领域模型/对象,User.java是持久化类,User.hbm.xml是对象和数据库的映射文件,文件命名最好遵循规范,不要在这创新,这是无意义的。Test.java是测试类,有main方法,HibernateUtil是抽象出的一个简易工具集。
有了项目工程,下面先从数据库开始一步一步建立我们的第一个应用程序。
使用Oracle 11g数据库,首先创建一个新的用户hibernate,再创建一个表USERS和序列SEQ_HIBERNATE_USERS作为测试使用,在SQL*PLUS的操作如下:
创建表和序列的SQL语句如下:
create table USERS(ID NUMBER(10) NOT NULL PRIMARY KEY,NAME VARCHAR2(20) NOT NULL,PHONE VARCHAR2(20),DEPARTMENT VARCHAR2(20),CITY VARCHAR2(20) NOT NULL,HIRE_TIME DATE NOT NULL);
create sequence SEQ_HIBERNATE_USERS increment by 1 start with 1 nocycle;
<?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><property name="connection.driver_class">oracle.jdbc.driver.OracleDriver</property><property name="connection.url">jdbc:oracle:thin:@localhost:1521:orcl</property><property name="hibernate.connection.username">hibernate</property><property name="hibernate.connection.password">hibernate</property><property name="hibernate.dialect">org.hibernate.dialect.OracleDialect</property><property name="current_session_context_class">thread</property><property name="show_sql">true</property><property name="format_sql">true</property><mapping resource="domain/domain/User.hbm.xml" /></session-factory></hibernate-configuration>
package demo.domain;public class User implements java.io.Serializable {private Integer id;private String name;private String phone;private String department;private String city;private java.util.Date hireTime;public User() {}// 以下省略所有的get和set方法}
<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN""http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd"><hibernate-mapping><class name="demo.domain.User" table="USERS"><id name="id" column="ID" type="java.lang.Integer" length="10"><generator column="NAME" type="java.lang.String"length="20" not-null="true" /><property name="phone" column="PHONE" type="java.lang.String"length="20" /><property name="department" column="DEPARTMENT" type="java.lang.String"length="20" /><property name="city" column="CITY" type="java.lang.String"length="20" not-null="true" /><property name="hireTime" column="HIRE_TIME" type="java.util.Date"not-null="true" /></class></hibernate-mapping>
import java.util.Date;import org.hibernate.*;import org.hibernate.cfg.Configuration;import demo.domain.User;public class Test {public static void main(String[] args) {Configuration config = new Configuration();config.configure();// 配置文件名不是hibernate.cfg.xml时将文件名传入SessionFactory sessionFactory = config.buildSessionFactory();// 相当于JDBC的注册驱动Session session = sessionFactory.openSession();// 相当于JDBC的getConnectionTransaction tx = session.beginTransaction();// Hibernate操作必须启动事务User user = new User();// 创建持久化对象user.setName("Sarin");user.setPhone("15912345678");user.setDepartment("研发部");user.setCity("大连");user.setHireTime(new Date());session.save(user);// 保存对象tx.commit();// 持久化到数据库中}}