摘要:
本文介绍了一个简单的 hibernate+junit+Middlegen的sample.
1.准备
软件准备
C:\hibernate>dir
驱动器 C 中的卷是 本地磁盘
卷的序列号是 08DF-03E4
C:\hibernate 的目录
2005-03-22 11:23 <DIR> .
2005-03-22 11:23 <DIR> ..
2005-03-20 17:14 <DIR> apache-ant-1.6.1
2005-03-21 11:59 <DIR> hibernate-2.1
2005-03-21 08:56 <DIR> hibernate-extensions
2005-02-17 18:14 <DIR> hibernate_handbible
2005-03-21 08:52 <DIR> Middlegen-Hibernate-r5
0 个文件 0 字节
7 个目录 1,531,150,336 可用字节
C:\hibernate>
下载Hibernate、Hibernate-Extension和Middlegen-Hibernate软件包的最新版本。
http://prdownloads.sourceforge.net/hibernate/
还需要连接sqlserver的jar包,我用的是sf.net 上的 jtds-0.9.jar(放在C:\hibernate\Middlegen-Hibernate-r5\lib下)
set Path =%Path%;C:\hibernate\apache-ant-1.6.1\bin 为后面ant做准备。
2.数据库和配置
数据库为MS Sqlserver, 库名:testbook
sql脚本:
if exists (select * from
dbo.sysobjects where id = object_id(N'[dbo].[book]') and OBJECTPROPERTY
(id, N'IsUserTable') = 1)
drop table [dbo].[book]GO
CREATE TABLE [dbo].[book] (
[id] [int] IDENTITY (1, 1) NOT NULL ,
[book] [nvarchar] (50) COLLATE Chinese_PRC_CI_AS NULL ,
[sn] [nvarchar] (50) COLLATE Chinese_PRC_CI_AS NULL
) ON PRIMARY
GO |
入MiddleGen 目录下的\config\database 子目录,根据我实际采用的数据库打开对应的配置文件。如这里我们用的是mssql数据库,对应的就是mssql.xml文件。
C:\hibernate\Middlegen-Hibernate-r5\config\database>type
mssql.xml
<!-- ===================================================================
--> <!-- ant properties/targets for MS SQL Server
--> <!-- note: this is not a proper xml file (there
is no root element) --> <!-- it is intended to be
imported from a *real* xml file --> <!-- ===================================================================
--> <property name="database.script.file"
value=""/> <property name="database.driver.file"
value="${lib.dir}/jtds-0.9.jar"/> <property
name="database.driver" value="net.sourceforge.jtds.jdbc.Driver"/>
<property name="database.url" value="jdbc:jtds:sqlserver://127.0.0.1:1433/testbook"/>
<property name="database.userid" value="sa"/>
<property name="database.password" value="zh1107"/>
<property name="database.schema" value="dbo"/>
<property name="database.catalog" value="testbook"/>
<property name="jboss.datasource.mapping"
value="MS SQLSERVER"/> |
改build.xml 为符合自己的配置
C:\hibernate\Middlegen-Hibernate-r5>type build.xml
<?xml version="1.0"?>
<!DOCTYPE project [
<!ENTITY database SYSTEM "file&:./config/database/mssql.xml">]>
<property name="name" value="HibernateSample"/> |
然后
C:\hibernate\Middlegen-Hibernate-r5>ant
出来图形界面,可以不作修改,点击上面的gen,然后退出。
C:\hibernate\Middlegen-Hibernate-r5\build\gen-src>dir
2005-03-22 18:50 <DIR> .
2005-03-22 18:50 <DIR> ..
2005-03-22 17:21 <DIR> HibernateSample
0 个文件 0 字节
3 个目录 1,528,754,176 可用字节
我们所要的 .hbm.xml 就出来了(在HibernateSample目录里)
然后到
C:\hibernate\hibernate-extensions\tools\bin>type setenv.bat
@echo off
set HIBERNATE_HOME=C:\hibernate\hibernate-2.1 (改)
echo HIBERNATE_HOME set to %HIBERNATE_HOME%
set JDBC_DRIVER=C:\hibernate\hibernate-extensions\lib\jtds-0.9.jar
(改)
echo JDBC_DRIVER set to %JDBC_DRIVER%
set HIBERNATETOOLS_HOME=%~dp0..
echo HIBERNATETOOLS_HOME set to %HIBERNATETOOLS_HOME%
if "%HIBERNATE_HOME%" == "" goto noHIBERNATEHome
set CORELIB=%HIBERNATE_HOME%\lib
set LIB=%HIBERNATETOOLS_HOME%\lib
set CP=%CLASSPATH%;%JDBC_DRIVER%;%HIBERNATE_HOME%\hibernate2.jar;%CORELIB%\commo
ns-logging-1.0.3.jar;%CORELIB%\commons-lang-1.0.1.jar;%CORELIB%\cglib-2.0-rc2.jar;%CORELIB%\dom4j-1.4.jar;%CORELIB%\odmg-3.0.ja
r;%CORELIB%\xml-apis.jar;%CORELIB
%\xerces-2.4.0.jar;%CORELIB%\xalan-2.4.0.jar;%LIB%\jdom.jar;%CORELIB%\commons-co
llections-2.1.jar;%LIB%\..\hibernate-tools.jar;
if not "%HIBERNATE_HOME%" == "" goto end
:noHIBERNATEHome
echo HIBERNATE_HOME is not set. Please set HIBERNATE_HOME.
goto end
:end |
C:\hibernate\hibernate-extensions\tools\bin>
生成PO
C:\hibernate\Middlegen-Hibernate-r5\build\gen-src\HibernateSample\hibernate>C:\h
ibernate\hibernate-extensions\tools\bin\hbm2java.bat *.xml --output=.
HIBERNATE_HOME set to C:\hibernate\hibernate-2.1
JDBC_DRIVER set to C:\hibernate\hibernate-extensions\lib\jtds-0.9.jar
HIBERNATETOOLS_HOME set to C:\hibernate\hibernate-extensions\tools\bin\..
2005-3-22 19:01:44 net.sf.hibernate.tool.hbm2java.Generator generate
信息: Generating 1 in .
然后整理得:
C:\hibernate\Middlegen-Hibernate-r5\build\gen-src\HibernateSample\hibernate>dir
驱动器 C 中的卷是 本地磁盘
卷的序列号是 08DF-03E4
C:\hibernate\Middlegen-Hibernate-r5\build\gen-src\HibernateSample\hibernate
的目录
2005-03-22 19:04 <DIR> .
2005-03-22 19:04 <DIR> ..
2005-03-22 19:04 865 Book.hbm.xml
2005-03-22 19:01 1,148 Book.java
2 个文件 2,013 字节
2 个目录 1,528,754,176 可用字节
3.应用hibernate
在classpath配置 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-2.0.dtd";>
<hibernate-configuration> <!-- SessionFactory
配置 --> <session-factory> <!-- 数据库URL -->
<property name="hibernate.connection.url">
jdbc:jtds:sqlserver://127.0.0.1:1433/testbook </property>
<!-- 数据库JDBC驱动 --> <property name="hibernate.connection.driver_class">
net.sourceforge.jtds.jdbc.Driver </property>
<!-- 数据库用户名 --> <property name="hibernate.connection.username">sa</property>
<!-- 数据库用户密码 --> <property name="hibernate.connection.password">zh1107</property>
<!--dialect ,每个数据库都有其对应的Dialet以匹配其平台特性 --> <property
name="dialect">
net.sf.hibernate.dialect.SybaseDialect </property>
<!-- 是否将运行期生成的SQL输出到日志以供调试 --> <property name="hibernate.show_sql">True</property>
<!-- 是否使用数据库外连接 --> <property name="hibernate.use_outer_join">True</property>
<!-- 事务管理类型,这里我们使用JDBC Transaction --> <property
name="hibernate.transaction.factory_class"> net.sf.hibernate.transaction.JDBCTransactionFactory
</property> <!--映射文件配置,注意配置文件名必须包含其相对于根的全路径-->
<mapping resource="HibernateSample/hibernate/Book.hbm.xml"
/> </session-factory> </hibernate-configuration> |
还有把hibernate-2.1下lib得.jar包引到classpath里。
Junit的测试,注意要junit包。HibernateTest.java
/*
* Created on 2005-3-20 dahe
*/
package test;import java.util.List;
import net.sf.hibernate.*;
import junit.framework.*;
import HibernateSample.hibernate.*;
import net.sf.hibernate.cfg.*;
public class HibernateTest extends TestCase {
Session session = null;
/**
* JUnit中setUp方法在TestCase初始化的时候会自动调用 一般用于初始化公用资源 此例中,用于初始化Hibernate
Session
*/
protected void setUp() {
try {
/**
* 采用hibernate.properties配置文件的初始化代码: Configuration config
= new
* Configuration(); config.addClass(TUser.class);
*/
// 采用hibernate.cfg.xml配置文件
// 请注意初始化Configuration时的差异:
// 1.Configuration的初始化方式
// 2.xml文件中已经定义了Mapping文件,因此无需再Hard Coding导入
// POJO文件的定义
Configuration config = new Configuration().configure();
SessionFactory sessionFactory = config.buildSessionFactory();
session = sessionFactory.openSession();
} catch (HibernateException e) {
e.printStackTrace();
}
}
/**
* * 与setUp方法相对应,JUnit TestCase执行完毕时,会自动调用tearDown方法 一般用于资源释放
* 此例中,用于关闭在setUp方法中打开的Hibernate Session
*/
protected void tearDown() {
try { session.close();
} catch (HibernateException e) {
e.printStackTrace();
}
}
/**
* 对象持久化(Insert)测试方法
*
* JUnit中,以”test”作为前缀的方法为测试方法,将被JUnit自动添加 到测试计划中运行
*/
public void testInsert() {
try {
Book user = new Book();
user.setBook("Emma");
user.setSn("asdfd");
Transaction tran=session.beginTransaction();
session.save(user);
tran.commit();
} catch (HibernateException e) {
e.printStackTrace();
Assert.fail(e.getMessage());
}
}
/**
* 对象读取(Select)测试 请保证运行之前数据库中已经存在name=’Erica’的记录
*/
public void testSelect() {
String hql = " from Book where book='Emma'";
try {
List userList = session.find(hql);
Book user = (Book) userList.get(0);
Assert.assertEquals(user.getBook(), "Emma");
} catch (HibernateException e) {
e.printStackTrace();
Assert.fail(e.getMessage());
}
}
} |
测试通过
|