//我的第一个hibernate3程序:写于2006-12-02夜
0.0 我的这个程序实际上是基于网上的一个例子:
最简单的Hibernate入门简介(http://blog.youkuaiyun.com/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.youkuaiyun.com/doodoofish/archive/2004/07/16/43207.aspx
参考文献:
1.http://www.ideagrace.com/html/doc/2006/11/18/08549.html