hibernate3 ,第一次上手

//我的第一个hibernate3程序:写于2006-12-02夜
0.0 我的这个程序实际上是基于网上的一个例子:
最简单的Hibernate入门简介(http://blog.csdn.net/doodoofish/archive/2004/07/16/43207.aspx),其他地方也有相似的文章,可惜不是不完整就是有错误,如果doodoofish是原作者,感谢他,如果是转贴,出了他还得感谢原作者。之前曾找到一个照抄的例子,但是里面错误百出,实在是不能忍受。
0.1 我用的是eclipse3.2,但是其中并没有用到eclipse的什么东西,也没有用到什么插件(其实我上面的插件可能自己就安装了了几十个)。

1.0 让我们开始吧!
1.1 首先说明的是,我用的是hibernate3.2,与2.*是不同的,主要是API的包名发生了改变,对我而言,第一次用H就是H3,所以不存在不适应的问题,但是网上的例子大多数基于2.*的。
1.2 说一下我的配置:
Hibernate3.2,
数据库MySQL Server 5.0.*,
mysql-connector-java-5.0.4.zip,
Eclipse3.2.* (最后一位是编译次数,不会影响接口的)。
1.3 我知道Hibernate是一种对象-关系映射(ORM)的技术,大概是代替VC中的序列化的东西,同时它利用的是数据库(而VC通常应用的是文件),不说了,越说我自己都说不清楚!反正,就是把对象存在数据库中,但并不需要你去操纵数据库——让Hibernate去与数据库打交道。
1.4 我的这个H程序是一个Console应用:一个顾客的名称和密码。这是从上面我提到的例子中拿来的。
1.5 我不用说怎么安装了,如果你这个还有问题。打住!

2.0
文件 Customer.java
package jens.data.hib3;

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;
 }

}
2.1 文件 Test.java
package jens.data.hib3;

import org.hibernate.*;
import org.hibernate.cfg.*;

public class Test {

 /**
  * @param args
  */
 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();
  }
 }
}
2.2 Mysql数据库
mysql里有一个Test数据库,我在上面建了一个表:
>use test;
>CREATE TABLE CUSTOMER
(
    CID INT NOT NULL PRIMARY KEY,
    USERNAME VARCHAR(12) NOT NULL,
    PASSWORD VARCHAR(12)
);
我在这儿老报错,后来我发现了直接拷贝到控制台可能存在问题,没办法,直接敲进去!
注意,mysql中好像没有integer类型,而是int类型。所以,我的参考文献中存在一点差别。
2.3 文件 hibernate.cfg.xml
<?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 name="java:/hibernate/HibernateFactory">
  <property name="show_sql">true</property>
  <property name="connection.driver_class">
   org.gjt.mm.mysql.Driver
   <!-- 这里是MySql的JDBC driver class名 -->
  </property>
  <property name="connection.url">
    jdbc:mysql://localhost/test
   <!--这里是test数据库URL -->
  </property>
  <property name="connection.username">root</property>
  <property name="connection.password">这儿写密码</property>
  <property name="dialect">
   org.hibernate.dialect.MySQLDialect
   <!-- 这里是mysql的Dialect,在 hibernate-3.2/etc/hibernate.properties 文件中可以找到 -->
  </property>
  <mapping resource="Customer.hbm.xml" />
  <!-- 指定Customer的映射文件 -->
 </session-factory>
</hibernate-configuration>

2.4 文件 Customer.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="jens.data.hib3.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>

注意2.3中的指定影射文件,也就是说可以任意定名称,但是我就这样了!

2.4 以上这些文件的位置
//我采用eclipse编译的,注意我把java文件前面的包名都注释掉了,这是因为好像有些不行。[可以了]
//我把以上4个文件直接放到工程的src文件夹:两个java文件里所当然,而两个xml文件我以为应该放到项目路径下,但好像不行!

2.5 编译需要的库
实际上我不知道编译需要hibernate-3.2/lib下多少个库,开始的时候我根据错误一个一个的添加,知道后来蹦出来一个什么JNDI错误,马德!受不了了,我只有把所有的库都添加进去了:大约20多个。(这个地方我在eclipse中添加编译路径的方法肯定有问题,有待指教)

2.6 我从5:00开始弄,6:00出去喝酒吃饭10:00回来,11:20开始写文章!现在是12:39。
还不错!感觉上不是非常的复杂:因为我这个实在是最简单的H应用了。

3.0 我这个东西实在是太简单了。
3.1 存在的问题:
1)关于配置文件应该放在哪儿?我现在不知道!放到src下面,然后在映射文件中写出类的全名就可以了
2)我需要全部的库吗?好像多了一点,Struct只有一两个!那是1.2以前的东西,现在也多了
3)我把这个搞通了,不知道再深入会遇到什么样的难题?
3.2 其他:
1)关于H2和H3,见:
http://www.thinkjam.org/meteor/archives/2005/11/hibernate21hibernate30.html
或者是找到他的英文原文。
2)Hibernate的文档据说不错:http://www.hibernate.org/5.html
中文:http://www.hibernate.org/hib_docs/reference/zh-cn/html/

3.3 再次感谢:
http://blog.csdn.net/doodoofish/archive/2004/07/16/43207.aspx

参考文献:
1.http://www.ideagrace.com/html/doc/2006/11/18/08549.html 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值