hibernate 初级应用篇

7 篇文章 0 订阅

最近在看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 serverapplication server的支持。然而,大多数的Hibernate入门介绍都加入了很多非Hibernate的东西,比如: Tomcat, Eclipse, Log4J,Struts, XDoclet, 甚至JBoss。这容易让人产生Hibernate复杂难懂的误解,特别是打击了初学者的积极性。

  在这篇文章将不涉及Eclipse, log4j, Struts, Tomcat, XDoclet,和JBoss。本文的目的是演示一下Hibernate的安装过程以及最基本的功能,从而给初学者一个低得不能再低的入门门槛。

  下载文件

  你需要Java SDK Hibernate包、Ant包、和JDBC Driver

  1Hibernate包下载地址:
http://prdownloads.sourceforge.net/hibernate/?sort_by=date&sort=desc

  2Ant包下载地址:
http://apache.130th.net/ant/binaries/apache-ant- 1.6.1 -bin.zip

  3JDBC 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目录下,创建两个目录: hibernatedb

  这样你有了如下的文件结构:

c:/workspace/My1stHibernate/
c:/workspace/My1stHibernate/src
c:/workspace/My1stHibernate/classes
c:/workspace/My1stHibernate/lib
c:/workspace/My1stHibernate/lib/hibernate
c:/workspace/My1stHibernate/lib/db


  4、将c:/dev/<你的Hibernate包所在目录>/hibernate2.jar文件copyc:/workspace/My1stHibernate/lib/hibernate下。

  将c:/dev/<你的Hibernate包所在目录>/lib/下的所有文件同样copyc:/workspace/My1stHibernate/lib/hibernate下。

  将你的JDBC Driver文件(一般是一个jar文件)copyc:/workspace/My1stHibernate/lib/db下。

  创建数据库

  1、用你最喜爱的database软件,创建一个hibernate_test的数据库。

  2、在此数据库下,新建一个table名为CUSTOMER

CREATE TABLE CUSTOMER
(
 CID INTEGER NOT NULL PRIMARY KEY, USERNAME VARCHAR(12) NOT NULL, PASSWORD VARCHAR(12)
);


  编写Java文件

public class Customer {
 private int id;
 private String username;
 private String password;

 public int getId() {
  return id;
 }

 public String getPassword() {
  return password;
 }

 public String getUsername() {
  return username;
 }

 public void setId(int id) {
  this.id = id;
 }

 public void setPassword(String password) {
  this.password = password;
 }

 public void setUsername(String username) {
  this.username = username;
 }

}


  将此类存为c:/workspace/My1stHibernate/src/Customer.java文件。

  编写Test

import net.sf.hibernate.*;
import net.sf.hibernate.cfg.*;

public class Test {

 public static void main(String[] args) {
  try {
   SessionFactory sf = new Configuration().configure().buildSessionFactory();
   Session session = sf.openSession();
   Transaction tx = session.beginTransaction();

   for (int i = 0; i 200; i++) {
    Customer customer = new Customer();
    customer.setUsername("customer" + i);
    customer.setPassword("customer");
    session.save(customer);
   }

   tx.commit();
   session.close();
  } catch (HibernateException e) {
   e.printStackTrace();
  }
 }
}


  将此类存为c:/workspace/My1stHibernate/src/Test.java文件。

  创建Hibernate映射文件

  因为这里只有一个Class --- Customer 和一个Table --- CUSTOMER,你只需要建立一个映射文件--- Customer.hbm.xml,来对应Customer类和CUSTOMER表之间的关系。

?xml version="1.0"?
!DOCTYPE hibernate-mapping PUBLIC
"-//Hibernate/Hibernate Mapping DTD//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-2.0.dtd"


hibernate-mapping
class name="Customer" table="CUSTOMER"
id name="id" column="CID"
generator class="increment" /
/id
property name="username" column="USERNAME" /
property name="password" column="PASSWORD" /
/class
/hibernate-mapping


  把此文件存为c:/workspace/My1stHibernate/src/Customer.hbm.xml,和Customer.java放在同一目录下。

  编写Ant build.xml文件

  你不一定要知道这个build.xml的细节,其实Ant也不是Hibernate所必须的。这里用Ant是为了简化一些任务,比如: 编译、copy、运行,等。

?xml version="1.0" ?

project name="My1stHibernate" default="build" basedir="."

property name="base.dir" value="." /
property name="src.dir" value="src" /
property name="lib.dir" value="lib" /
property name="build.dir" value="classes" /

path id="myclasspath"
fileset dir="${lib.dir}"
include name="**/*.jar" /
/fileset
pathelement location="${build.dir}" /
/path

target name="init"
mkdir dir="${build.dir}" /
/target

target name="build" depends="init" description="compile the source files"
javac classpathref="myclasspath" srcdir="${src.dir}" destdir="${build.dir}" /
copy todir="${build.dir}"
fileset dir="${src.dir}"
exclude name="**/*.java"/
/fileset
/copy
/target

target name="run" depends="build"
java classpathref="myclasspath" classname="Test" fork="true" /
/target

target name="clean"
delete includeEmptyDirs="true"
fileset dir="${build.dir}" /
/delete
/target

/project


  配置Hibernate描述文件

  Hibernate描述文件可以是一个propertiesxml 文件,其中最重要的是定义数据库的连接。我这里列出的是一个XML格式的hibernate.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"
oracle.jdbc.driver.OracleDriver
!-- 这里是Oracle 9iJDBC driver class --
/property
property name="connection.url"
jdbc:oracle:oci8:@hibernate_test
!-- 这里是Oraclehibernate_test数据库URL --
/property
property name="connection.username"
你的数据库用户名
/property
property name="connection.password"
你的数据库密码
/property
property name="dialect"
net.sf.hibernate.dialect.Oracle9Dialect
!-- 这里是Oracle 9iDialect --
/property

mapping resource="Customer.hbm.xml" / !-- 指定Customer的映射文件 --

/session-factory

/hibernate-configuration


  如果你用的不是Oracle 9i,可到C:/dev/<你的Hibernate包所在目录>/src/hibernate.properties文件里找到你的数据库,然后替换以上相对应的值。

  开始运行

  到c:/workspace/My1stHibernate下,运行ant run。如果你严格依照以上步骤,应该看到

run:
[java] log4j:WARN No appenders could be found for logger (net.sf.hibernate.cfg.Environment).
[java] log4j:WARN Please initialize the log4j system properly.
[java] Hibernate: insert into CUSTOMER (USERNAME, PASSWORD, CID) values (?, ?, ?)
BUILD SUCCESSFUL


  到你的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>

 

运行一下就可以看到他们所说的可爱结果了。

 

个人理解:比较j2eecmp实现起来更加轻量级化。当然我理解还是皮毛,还有待于更加深一步的理解。大致原理就是。由properties或者cfg.xml配置初始化参数。Hbm.xml建立mapping管理。写一序列化的类与mapping字段一一对应。然后剩余工作就都是hibernate的了。

需要注意的是:数据库各有差异。可能会出现booleanlongmysql里没找到此类型),或者其他等等差异。这里我也想不全。总之感觉这里可能会是折磨程序员的地方。

欢迎各位交流探讨。

msnyun15291li@hotmail.com

耗时约3.5小时!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值