最近在看jbpm方面的东西,发现它在使用hibernate,于是花了一些对hibernate了解的时间。关于jbpm的其他英文文档正在翻译实践中。不久会一步一步发出个人实时状况!
对于已经炒的很久了的hibernate,我才刚刚接触是不是很落伍了。呵呵,不想那么多。一步一步开始学起。
首先,浏览一篇,题为“如何学习Hibernate”的文章,似乎有所觉悟,对对象持久层有所理解,在EJB里实体bean的概念似乎有点味道。
然后,看了题为“Hibernate入门 - 基础配置”的文章,讲述了hibernate入门知识。大致能够理解,加上看了一些jbpm3里的关于hibernate的部分,以及一些对DB知识还是有所准备,还有就是在以前项目中见到一个朋友用过,自己到以前代码里搜了一下*.hbm.xml似乎能理清它的大致工作要点。当然只是局限在皮毛上。此时只是知道hibernate到底干什么的了。但是还没有自己动手用过。
继续搜索,找到题为“十分钟在jb里面运行hibernate的简单例子”和“Java开源项目Hibernate快速入门”的文章。动手试试。里面有句话“我所给的只是我当初刚开始接触hibernate时候很想要的一个简单例子和设置方法。这位大哥还真是救命草啊。”不过我想还是从最最简单的不需要任何例如jb这样的工具辅助来完成吧。
转载自 www.javajia.com的文章如下:
其实Hibernate本身是个独立的框架,它不需要任何web server或application server的支持。然而,大多数的Hibernate入门介绍都加入了很多非Hibernate的东西,比如: Tomcat, Eclipse, Log4J,Struts, XDoclet, 甚至JBoss。这容易让人产生Hibernate复杂难懂的误解,特别是打击了初学者的积极性。
在这篇文章将不涉及Eclipse, log4j, Struts, Tomcat, XDoclet,和JBoss。本文的目的是演示一下Hibernate的安装过程以及最基本的功能,从而给初学者一个低得不能再低的入门门槛。
下载文件
你需要Java SDK、 Hibernate包、Ant包、和JDBC Driver。
1、Hibernate包下载地址:
http://prdownloads.sourceforge.net/hibernate/?sort_by=date&sort=desc
2、Ant包下载地址:
http://apache.130th.net/ant/binaries/apache-ant-
1.6.1
-bin.zip
3、JDBC Driver要根据你用的database来定,一般database官方网站上都会有。Hibernate支持常用的database,比如 MySQL, Oracle, PostgreSQL, 和MS-SQL Server。这些数据库都有JDBC Driver:
Oracle JDBC Driver下载地址(下载前必须同意Oracle协议书)
http://otn.oracle.com/software/htdocs/distlic.html?/software/tech/java/sqlj_jdbc/htdocs/jdbc9201.html
MySQL JDBC Driver下载地址
http://dev.mysql.com/downloads/connector/j/3.0.html
PostgreSQL JDBC Driver下载地址
http://jdbc.postgresql.org/download.html
MS-SQL Server JDBC Driver下载地址
http://www.microsoft.com/downloads/details.aspx?FamilyID=9f1874b6-f8e1-4bd6-947c-0fc5bf05bf71&displaylang=en
4、将Hibernate包和Ant包分别解压至c:/dev/下(此目录不重要,你可以换其它任何目录)。
配置环境
1、你需要添加一个新的环境变量: ANT_HOME,让它指向c:/dev/<你的ANT包所在目录>。并在PATH环境变量里添加%ANT_HOME%/bin。
2、你需要添加一个新的环境变量: JAVA_HOME,让它指向你的j2sdk根目录。并在PATH环境变量里添加%JAVA_HOME%/bin。
3、创建一个项目目录,比如c:/workspace/My1stHibernate。
在项目目录下,另外创建三个目录: src, classes, lib。
在lib目录下,创建两个目录: hibernate和db。
这样你有了如下的文件结构:
c:/workspace/My1stHibernate/ |
4、将c:/dev/<你的Hibernate包所在目录>/hibernate2.jar文件copy到c:/workspace/My1stHibernate/lib/hibernate下。
将c:/dev/<你的Hibernate包所在目录>/lib/下的所有文件同样copy到c:/workspace/My1stHibernate/lib/hibernate下。
将你的JDBC Driver文件(一般是一个jar文件)copy到c:/workspace/My1stHibernate/lib/db下。
创建数据库
1、用你最喜爱的database软件,创建一个hibernate_test的数据库。
2、在此数据库下,新建一个table名为CUSTOMER
CREATE TABLE CUSTOMER |
编写Java文件
public class Customer { |
将此类存为c:/workspace/My1stHibernate/src/Customer.java文件。
编写Test类
import net.sf.hibernate.*; |
将此类存为c:/workspace/My1stHibernate/src/Test.java文件。
创建Hibernate映射文件
因为这里只有一个Class --- Customer 和一个Table --- CUSTOMER,你只需要建立一个映射文件--- Customer.hbm.xml,来对应Customer类和CUSTOMER表之间的关系。
<?xml version="1.0"?> |
把此文件存为c:/workspace/My1stHibernate/src/Customer.hbm.xml,和Customer.java放在同一目录下。
编写Ant build.xml文件
你不一定要知道这个build.xml的细节,其实Ant也不是Hibernate所必须的。这里用Ant是为了简化一些任务,比如: 编译、copy、运行,等。
<?xml version="1.0" ?> |
配置Hibernate描述文件
Hibernate描述文件可以是一个properties或xml 文件,其中最重要的是定义数据库的连接。我这里列出的是一个XML格式的hibernate.cfg.xml描述文件。
<?xml version="1.0" encoding="utf-8" ?> |
如果你用的不是Oracle 9i,可到C:/dev/<你的Hibernate包所在目录>/src/hibernate.properties文件里找到你的数据库,然后替换以上相对应的值。
开始运行
到c:/workspace/My1stHibernate下,运行ant run。如果你严格依照以上步骤,应该看到
run: |
到你的hibernate_test数据库看一下,在CUSTMOR表里新添了200条记录,但你没有写任何JDBC code。
以后如果你要更换数据库,只需要改变hibernate.cfg.xml描述文件里相应的值即可。
个人认为此文章写的比较详细,而且我也一步一步按着做了,确实没问题。对了。Java 代码最好自己敲一遍,要不会有<>以及{这些字符集的错误,反正代码也不多。敲起来也几分钟就完事了。对于xml文件,最好先拷贝到xmlspy工具下统一一下格式再保存到他们指定的目录里。这样就确保代码是万无一失的了。我当时使用的mysql数据库。Cfg.xml文件如下:
<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE hibernate-configuration PUBLIC "-//Hibernate/Hibernate Configuration DTD//EN"
"http://hibernate.sourceforge.net/hibernate-configuration-2.0.dtd">
<hibernate-configuration>
<session-factory name="java:/hibernate/HibernateFactory">
<property name="show_sql">true</property>
<property name="connection.driver_class">com.mysql.jdbc.Driver</property>
<property name="connection.url">jdbc:mysql://localhost:3306/hibernate_test</property>
<property name="connection.username">root</property>
<property name="connection.password"/>
<property name="dialect">net.sf.hibernate.dialect.MySqlDialect</property>
<mapping resource="Customer.hbm.xml"/>
</session-factory>
</hibernate-configuration>
运行一下就可以看到他们所说的可爱结果了。
个人理解:比较j2ee的cmp实现起来更加轻量级化。当然我理解还是皮毛,还有待于更加深一步的理解。大致原理就是。由properties或者cfg.xml配置初始化参数。Hbm.xml建立mapping管理。写一序列化的类与mapping字段一一对应。然后剩余工作就都是hibernate的了。
需要注意的是:数据库各有差异。可能会出现boolean,long(mysql里没找到此类型),或者其他等等差异。这里我也想不全。总之感觉这里可能会是折磨程序员的地方。
欢迎各位交流探讨。
耗时约3.5小时!