18.
19. //从数据库中加载一个User实例。需要两个参数,第一个参数
20. //com.abc.people.User.class是User类的Class(参见Class类
21. //的相关内容)对象。1是这个User实例的标识属性。实际上就
22. //是根据主键从数据库中读取一条记录,然后封装成一个User对象。
23. //是不是比自己写JDBC语句方便、自然多了呢?
24. User user = (User)session.load(com.abc.people.User.class, 1);
25.
26. String name = user.getName();
27. String gender = user.getGender();
28.
29. System.out.println("****************");
30. System.out.println("* 姓名:" + name+" *");
31. System.out.println("* 性别:" + gender+" *");
32. System.out.println("****************");
33.
34. session.getTransaction().commit();
35.
36. factory.close();
37.
38. }
39. }
相应地,根据其所在包名,此文件应放置在ImprovedHibernate目录下的com\abc目录下。
此时若编译TestHibernate.java,则会报一大堆的错误,说XX包不存在,YY符号找不到。这是因为我们还没有引入程序要用到的hibernate的JAR包,也没有正确地设置CLASSPATH环境变量。这次要用到的JAR包和上次一样,所以只需简单地把上次用到的lib目录拷贝到ImprovedHibernate下即可。此时,整个实例的目录结构如下图所示:
下一步就是应该编写批处理文件setclasspath.bat了。与上篇的批处理文件类似,需要把要用到的JAR包添加到CLASSPATH中。尤为重要的是,不要漏掉了当前目录。此批处理文件的内容如下。
- set classpath=.;E:\DemoPrograms\ImprovedHibernate\lib\hibernate3.jar;E:\DemoPrograms\ImprovedHibernate\lib\sqljdbc4.jar;E:\DemoPrograms\ImprovedHibernate\lib\dom4j-1.6.1.jar;E:\DemoPrograms\ImprovedHibernate\lib\slf4j-api-1.6.2.jar;E:\DemoPrograms\ImprovedHibernate\lib\slf4j-simple-1.6.2.jar;E:\DemoPrograms\ImprovedHibernate\lib\hibernate-jpa-2.0-api-1.0.1.Final.jar;E:\DemoPrograms\ImprovedHibernate\lib\cglib-2.2.jar;E:\DemoPrograms\ImprovedHibernate\lib\commons-collections-3.1.jar;E:\DemoPrograms\ImprovedHibernate\lib\javassist-3.12.0.GA.jar;E:\DemoPrograms\ImprovedHibernate\lib\jta-1.1.jar
注意:上述set命令是一个完整的DOS命令,不要随便加回车键,否则会报错。
在命令行窗口中把目录切换到ImprovedHibernate下,运行此批处理文件。由于前面的com\abc和com\abc\people目录都是放置在此目录下的,因此在此目录下执行javac和java命令时,CLASSPATH中的当前目录就是此目录。这样User类等都可以被正确地加载。用如下的命令来编译TestHibernate.java。
javac com\abc\TestHibernate.java
这样在com\abc目录下就生成了TestHibernate.class文件。运行用如下的命令:java com.abc.TestHibernate(写类的全名)。运行前别忘了开启SQL Server服务。我们可以看到在一长串的日志之后,程序运行的结果如下:
成功运行了。

