/**
作者:Willpower
来源:Rifoo Technology(http://www.rifoo.com)
时间:2006-07
备注:转载请保留以上声明
**/
本章开始做一个比较详细的应用程序,请大家跟我一起学习本书的内容。我们的范例名称叫Message of the day,本章中,有时我们会简单称为Motd。它源于UNIX上的一个程序,可以在用户登录系统时发送当前的一些通知消息。
安装工具
假设你已经安装了JDK1.3或以上版本,那么还需要Hibernate包和一个数据库的支持。当然,还可以装一个ANT构建工具。
Hibernate3
从官方网站下载最新的版本,解压到本地任何一个目录,本书的例子中的存放目录为C:\home\hibernate-3.0,解压后的文件包括Hibernate源文件以及jar包,还有Hibernate所需要的第三方类库lib。
HSQL 1.7.3.3
本例中的数据库采用HSQL,它是JAVA编写的开源数据库。大家可以去它的主页http://hsqldb.sourceforge.net/下载最新的程序。下载后解压到本地任何一个目录,本例的存放目录为C:\home\hsqldb\。接着我们将使用一个名称叫Hibernate的数据库。首先创建一个包含Hibernate文件的目录,比如C:\home\hsqldb\hibernate\。然后,新建一个server.properties文件,将它放到该目录中。
Listing 3-1. Hibernate范例数据库的配置文件
CODE:
# Filename: C:\home\hsqldb\server.properties
#
# Hibernate examples database - create a
# database on the default port.
# Specifies the path to the database
# files – note that the trailing slash
# IS required.
server.database.0=file:/home/hsqldb/hibernate/
# Specifies the name of the database
server.dbname.0=hibernate
在命令行中手动输入以下命令来启动数据库:
java -classpath ..\lib\hsqldb.jar org.hsqldb.Server
关闭数据库可以直接关命令行窗口,但是如果想用另一种优雅的方式来关闭,我们需要编写简单的JAVA程序来完成(需要hsqldb.jar在CLASSPATH中能找到)
Listing 3-2. Simple Shutdown Logic for the HSQL Server
CODE:
import java.sql.*;
public class Shutdown {
public static void main(String[] argv) throws Exception{
Class.forName("org.hsqldb.jdbcDriver" );
Connection c =DriverManager.getConnection(
"jdbc:hsqldb:hsql://localhost/hibernate",
"sa",
"");
Statement s = c.createStatement();
s.execute("SHUTDOWN");
c.close();
}
}
在实际情况中,我们如果要连接不同的数据库,我们只需要更改以下内容:
• Hibernate的方言类(dialect)
• JDBC驱动
• 数据库连接URL
• 数据库用户名
• 数据库密码
这些将在后面章节中讲到。
Ant 1.6.2
ANT是可选安装的,当然我们推荐安装,因为它可以方便的构建一个JAVA应用。可以到ANT的主页http://ant.apache.org/上下载最新安装程序。我们假设你熟悉ANT,所以后面我们不解释build.xml文件的详细含义。本书的例子是用ANT1.6.2构建。
下面的清单提供了构建本范例的ANT脚本,注意:我们的ANT TASK中包含有一个名为schema的任务,它使用hibernate工具直接将mapping映射文件生成数据库schema,也就是自动创建数据库。
Listing 3-3.构建第三章范例的ANT脚本
CODE:
<project default="all">
<property name="hibernate" location="/home/hibernate-3.0" />
<property name="jdbc" location="/home/hsqldb/hsqldb.jar" />
<property name="src" location="src" />
<property name="config" location="." />
<property name="dist" location="dist" />
<property name="bin" location="${dist}/bin" />
<property name="lib" location="${dist}/lib" />
<property name="name" value="chapter03" />
<path id="classpath.base">
<pathelement location="." />
<pathelement location="${bin}" />
<pathelement location="${hibernate}/hibernate3.jar" />
<fileset dir="${hibernate}/lib" includes="**/*.jar" />
<pathelement location="${jdbc}" />
</path>
<target name="init">
<mkdir dir="${dist}" />
<mkdir dir="${bin}" />
<mkdir dir="${lib}" />
</target>
<target name="schema">
<taskdef
name="schemaexport"
classname="org.hibernate.tool.hbm2ddl.SchemaExportTask"
classpathref="classpath.base" />
<schemaexport
properties="hibernate.properties"
quiet="no"
text="yes"
drop="no"
output="export.sql">
<fileset dir="${src}">
<include name="**/*.hbm.xml"/>
</fileset>
</schemaexport>
</target>
<target name="compile" depends="init">
<javac srcdir="${src}" destdir="${bin}">
<classpath refid="classpath.base" />
</javac>
</target>
<target name="dist" depends="compile">
<jar
destfile="${lib}/${name}.jar"
basedir="."
includes="build.xml,src/**,cfg/**,bin/**"
excludes=".classpath,.project,.cvsignore" />
</target>
<target name="clean">
<delete dir="${dist}" />
<delete dir="${bin}" />
<delete file="${lib}/${name}.jar" />
</target>
<target name="all" depends="dist" />
</project>
Hibernate配置文件
Hibernate需要知道它所连接的数据库,以及一些相关的映射方式。
Listing 3-4. “Message of the day” 应用的映射文件
CODE:
<?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>
<property name="connection.driver_class">
org.hsqldb.jdbcDriver
</property>
<property name="connection.url">
jdbc:hsqldb:hsql://localhost/hibernate
</property>
<property name="connection.username">sa</property>
<property name="connection.password"> </property>
<property name="pool_size">5</property>
<property name="show_sql">false</property>
<property name="dialect">
org.hibernate.dialect.HSQLDialect
</property>
<mapping resource=" Motd.hbm.xml"/>
</session-factory>
</hibernate-configuration>
show_sql本例中设置为false,但是如果在调试时可以将它设置为true,很方便的可以看到后台打印的SQL语句。dialect属性也需要设置一下,最好不要设置为大多数数据库都可以接受的一种SQL子集GenericDialect,因为不是很方便扩展。Hibernate使用dialect类来决定可选的SQL语句用来创建和查询数据库。
注意:该文件需要放置在CLASSPATH中