Hibernate是现在炙手可热的ORM工具,最近终于成功使用它做了一个小小的例子,算是入了门。下面就谈谈这个例子吧。
该范例运行的环境是:JBuilder9 + SQL Server 2000 + Hibernate3.1。 首先下载hibernate3.1压缩包,解压到某个文件夹下,称为%hibernate%。 用SQL Server2000建立一个表,命名为CUSTOMER,表的结构如下:
字段 | 类型 |
----------+-----------------------+-------
CID | int | 主键
USERNAME | varchar(12) | not null
PASSWORD | varchar(12) |
用JBuilder9新建一个project,命名为example,我们用%example%表示该项目的文件夹。在菜单中选择:project -> project properties -> Required Libraries,加入%hibernate%/lib下的jar文件以及%hibernate%下的hibernate3.jar。
根据我们建立的CUSTOMER表,建立一个和它对应的类Customer,代码如下:
import java.lang.String;
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;
}
}
这个类就是CUSTOMER表的映射,我们用一个XML文件定义这种映射,命名为Customer.hbm.xml。内容如下:
<?xml version="1.0"?>
<!DOCTYPE hibernate-mapping PUBLIC
"-//Hibernate/Hibernate Mapping DTD//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<hibernate-mapping>
<class name="Customer" table="CUSTOMER">
<id name="id" column="CID"> //定义主键的映射
</id>
<property name="username" column="USERNAME" /> //定义字段的映射
<property name="password" column="PASSWORD" />
</class>
</hibernate-mapping>
此外,还需要一个XML文件定义hibernate的相关参数,命名为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-3.0.dtd">
<hibernate-configuration>
<session-factory name="java:/hibernate/HibernateFactory">
<property name="show_sql">true</property>
<property name="connection.driver_class">
sun.jdbc.odbc.JdbcOdbcDriver //定义数据驱动
</property>
<property name="connection.url">
jdbc:odbc:SQL Server //定义数据库URL
</property>
<property name="connection.username">
sa //定义数据库密码
</property>
<property name="connection.password">
</property>
<property name="dialect">
org.hibernate.dialect.SQLServerDialect
</property>
<mapping resource="Customer.hbm.xml" />
</session-factory>
</hibernate-configuration>
选择make project编译源代码,然后把上面的两个xml文件放到%example%/classes下面,同时把%hibernate%/etc下面的文件log4j.properties一并复制到%example%/classes下面。
为了测试hibernate的效果,我们再编写一个test.java文件加入该项目,代码如下:
import org.hibernate.*;
import org.hibernate.cfg.*;
import java.lang.String;
public class Test
{
public static void main(String[] args) throws Exception
{
try
{
SessionFactory sf = new Configuration().configure().buildSessionFactory();
Session session = sf.openSession();
Transaction tx = session.beginTransaction();
for (int i = 0; i < 20; i++)
{
Customer customer = new Customer();
customer.setId(i+1000);
customer.setUsername("customer" + String.valueOf(i));
customer.setPassword("good");
session.save(customer);
}
tx.commit();
session.close();
} catch (HibernateException e)
{
e.printStackTrace();
}
}
}
在该项目中运行test,可以看到在CUSTOMER表中插入了20条记录。但是我们在test.java中并没有直接调用JDBC,也没有直接使用SQL语句。