摘要:
本文介紹了一個簡單的 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腳本:
clearcase/" target="_blank" >cccccc>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()); } } /** * 對象讀?。⊿elect)測試 請保證運行之前數據庫中已經存在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()); } } } |
測試通過
原文轉自:http://www.anti-gravitydesign.com