在上一篇博文《纯手工编写第一个Hibernate程序》中,介绍了如何手工编写第一个简单的Hibernate程序。在那个例子中,为了降低程序编写的难度,所有的类都没有包的声明。然而在实际开发中,为了解决命名冲突的问题,通常都把类声明在某个包中。因此,本篇博文就介绍如何在第一个程序例子的基础上,为类添加包声明,并访问上个例子保存的阿汤哥的信息(为方便阅读,所有程序、配置文件中与上个实例中重复的注释都被删除,读者若有不明白之处可参考上篇博文)。
我们在目录E:\DemoPrograms下新建一个目录ImprovedHibernate,来保存本实例所有的文件。
首先来看User(User.java文件中)类。
1. package com.abc.people;
2.
3. public class User {
4.
5. private int id;
6. private String name;
7. private int age;
8. private String gender;
9.
10. public int getId() {
11. return id;
12. }
13.
14. public void setId(int id) {
15. this.id = id;
16. }
17.
18.
19. public String getName() {
20. return name;
21. }
22.
23. public void setName(String name) {
24. this.name = name;
25. }
26.
27. public int getAge() {
28. return age;
29. }
30.
31. public void setAge(int age) {
32. this.age = age;
33. }
34.
35. public String getGender()
36. {
37. return gender;
38. }
39.
40. public void setGender(String gender)
41. {
42. this.gender = gender;
43. }
44.
45. }
如上述第一行代码所示,我们将User类声明在com.abc.people包中。包的层次结构与目录的层次结构是一一对应的。因此,我们在目录ImprovedHibernate下建立目录结构com\abc\people(如下图所示)。
然后将User.java放置到people目录中,编译之。实际上,User.java文件放置在哪里并不重要,重要的是编译后的User.class文件要在正确的位置。经过上述的编译后,就在正确的位置——people目录下——生成了User.class文件。
再来看User.hbm.xml映射文件。由于目前User类在包com.abc.people中,因此在hibernate-mapping元素中就用package属性指定了此包名。如下面的第六行所示。
1. < xml version="1.0" encoding="gb2312" >
2. 3. "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
4. "http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd">
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
(User.hbm.xml文件)
此文件应与User.java文件放置在同一目录下(更准确地讲,是应该与User.class放置在同一目录下),即ImprovedHibernate下的com\abc\people目录下。
接着来看配置文件hibernate.cfg.xml。由于映射文件User.hbm.xml放置在了目录com\abc\people中,因此需要修改resource的值。如下面的20至22行所示。
1. < xml version="1.0" encoding="gb2312" >
2.
3. 4. "-//Hibernate/Hibernate Configuration DTD 3.0//EN"
5. "http://www.hibernate.org/dtd/hibernate-configuration-3.0.dtd">
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
22.
23.
24.
25.
26.
hibernate.cfg.xml文件
这里需要注意的是,用的是“/”作为分隔符,而不是Windows风格的“\”。
接着来修改TestHibernate.java文件。我们把它声明在com.abc包下,并修改此程序的功能为读取第一个hibernate程序中保存的阿汤哥的信息。具体如下所示:
1. //包声明。
2. package com.abc;
3.
4. import org.hibernate.Session;
5. import org.hibernate.SessionFactory;
6. import org.hibernate.cfg.Configuration;
7. //注意要正确地引入User类。
8. import com.abc.people.User;
9.
10. public class TestHibernate {
11.
12. public static void main(String[] args) {
13.
14. Configuration cfg = new Configuration().configure();
15. SessionFactory factory = cfg.buildSessionFactory();
16. Session session = factory.getCurrentSession();
17. session.beginT
