User.java:
[java]
package com.pojo;
public class User implements java.io.Serializable {
private Integer id;
private String name;
private Integer age;
public Integer getId() {
return this.id;
}
private void setId(Integer id) {
this.id = id;
}
public String getName() {
return this.name;
}
public void setName(String name) {
this.name = name;
}
public Integer getAge() {
return this.age;
}
public void setAge(Integer age) {
this.age = age;
}
}
解析:
你可以看到这个类对属性的存取方法(getter and setter method)使用了标准 JavaBean 命名约定,同时把类属性(field)的访问级别设成私有的(private)。这是推荐的设计,但并不是必须的。Hibernate 也可以直接访问这些 field,而使用访问方法(accessor method)的好处是提供了重构时的健壮性(robustness)。
对一特定的 user, id 属性持有唯一的标识符(identifier)的值。如果我们希望使用 Hibernate 提供的所有特性,那么所有的持久化实体(persistent entity)类(这里也包括一些次要依赖类)都需要一个这样的标识符属性。而事实上,大多数应用程序(特别是 web 应用程序)都需要通过标识符来区别对象,所以你应该考虑使用标识符属性而不是把它当作一种限制。然而,我们通常不会操作对象的标识(identity),因此它的 setter 方法的访问级别应该声明 private。这样当对象被保存的时候,只有 Hibernate 可以为它分配标识符值。你可看到Hibernate可以直接访问 public,private 和 protected 的访问方法和 field。所以选择哪种方式完全取决于你,你可以使你的选择与你的应用程序设计相吻合。
所有的持久化类(persistent classes)都要求有无参的构造器,因为 Hibernate 必须使用 Java 反射机制来为你创建对象。构造器(constructor)的访问级别可以是 private,然而当生成运行时代理(runtime proxy)的时候则要求使用至少是 package 级别的访问控制,这样在没有字节码指令(bytecode instrumentation)的情况下,从持久化类里获取数据会更有效率。
数据库“pla”下建表"user":
解析:此表表名与User类同名,首写字母大小写随意。
User.hbm.xml:
[html]
< xml version="1.0" encoding="utf-8" >
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
解析:
这是映射文件。Hibernate 需要知道怎样去加载(load)和存储(store)持久化类的对象。这正是 Hibernate 映射文件发挥作用的地方。映射文件告诉 Hibernate 它应该访问数据库(database)里面的哪个表(table)及应该使用表里面的哪些字段(column)。
hibernate.cfg.xml:
[html]
< xml version='1.0' encoding='UTF-8' >
"-//Hibernate/Hibernate Configuration DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd">
org.hibernate.dialect.MySQLDialect
jdbc:mysql://localhost:3306/pla
com.mysql.jdbc.Driver
解析:
有了持久化类和它的映射文件,现在是配置 Hibernate的时候了。在这里,我们配置了 Hibernate 的SessionFactory — 一个关联于特定数据库全局的工厂(factory)。如果你要使用多个数据库,就要用多个的,通常把它们放在多个配置文件中(为了更容易启动)。Hibernate 将为你的应用程序连接到数据库。注意最后的标签,它的生成方法如下图:
TestHibernate1.java:
[java]
package com.test;
import org.hibernate.*;
import org.hibernate.cfg.Configuration;
import com.pojo.User;
import junit.framework.TestCase;
public class TestHibernate1 extends TestCase {
public void test1(){
Transaction tr=null;
// 1 建立持久化对象(实体类对象)
User user = new User();
user.setName("测试");
user.setAge(new Integer(30));
//2 创建一个Configuration对象,默认去加载 src 下 hi