分享
 
 
 

Spring指南(官网)

王朝java/jsp·作者佚名  2006-01-09
窄屏简体版  字體: |||超大  

Hibernate / Spring / Middlegen / XDoclet Tutorial v1.5

Part 1 in the Warfrog.com Hibernate tutorial series

Before we begin

What this tutorial covers

This tutorial is built to help java developers get Hibernate, Spring, Middlegen and XDoclet up an running in a timely fashion. When I first began learning Hibernate, Spring, Middlegen, and XDoclet, I was overwhelmed by how large and involved each package was. Literally, there are thousands of files to deal with, vast amounts of jars to wade through, and so many different xml files that it's hard to know where to start. There are several excellent tutorials available online and they all were useful in someway to me, but none of them pandered to my way of learning, by example. In response, I've attempted to compile them into a single tutorial, allowing developers like myself to get up to speed on these great technologies faster. In essence, this tutorial is a "shortest" path example to getting all of these wonderful technologies working. Once you've completed this tutorial you should have a development process for integrating Hibernate, Spring, Middlegen, and XDoclet into your future projects.

What this tutorial doesn't cover

This tutorial won't review how Hibernate, Spring, Middlegen, or XDoclet work. Additionally, this tutorial won't review the files I provide in the hibernatetutorial.zip. This may seem odd at first, but the documentation I've provided in the files does a great job of explaining them. If you find the documentation lacking and you have any questions please feel free to email me using the email address I've provided in the resource section, I'm always glad to help. Additionally, I can be contact on the irc.freenode.net under the handle TdC_VgA.

Downloading / Installing optional software

Install Command Prompt Here

Download: CmdHere.reg.txt

URL: http://www.tburke.net/info/win2k/regfiles/CmdHere.reg.txt

Install: Save CmdHere.reg.txt

Rename CmdHere.reg.txt to cmdhere.reg

Right click on cmdhere.reg -> Merge

Install Eclipse

Download: eclipse-platform-2.1.X-win32.zip

URL: http://www.eclipse.org/downloads/index.php

Extract file to c:\java\eclipse (you can use any directory you like, I'll be assuming C:\java\eclipse though)

Install ANT

Get newest version

URL: http://ant.apache.org/manual/index.html

Install: Follow instructions at the URL above

Setting up the project

Launch Eclipse

File->New->Project

Select Java Project

Click Ok

Project Name = "hibernatetutorial"

Click Next

Make sure the source tab is selected and click the Add Folder button

Click the "Create New Folder" button

Type in "src"

Click OK

Click Yes to the "Do you want to..." message

Click Finish

Minimize Eclipse, we're done using it for now

Create the staging folder

Note: I picked C:\hibernatetutorial, you can use whatever you like, but I'll be assuming C:\hibernatetutorial for the rest of this document.

Extract the hibernatetutorial.zip to C:\hibernatetutorial. After that you'll need to open a command prompt to c:\hibernatetutorial and type "ant setup-dirs"

OR if you've decided not to use ANT

Create the following directories:

C:\hibernatetutorial\apps

C:\hibernatetutorial\apps\hibernate

C:\hibernatetutorial\apps\hibernate-ext

C:\hibernatetutorial\apps\middlegen

C:\hibernatetutorial\apps\spring

C:\hibernatetutorial\apps\xdoclet

C:\hibernatetutorial\apps\hsqldb

C:\hibernatetutorial\lib

C:\hibernatetutorial\lib\hibernate

C:\hibernatetutorial\lib\spring

C:\hibernatetutorial\lib\xdoclet

C:\hibernatetutorial\lib\hsqldb

C:\hibernatetutorial\hsqldb

C:\hibernatetutorial\downloads (optional - used for storing the downloads)

Time to install some software

Note: Every "extract the zip file..." line below means extract the zip file directly to the folder. Do not change the root dir and/or "extract to FILENAME directory." There may be some repetitive folder names, just ignore them (ex. C:\hibernatetutorial\apps\hsqldb\hsqldb ). If you change the root directory you'll need to manually edit the build.xml, I've provided, to point to the correct application roots. Additionally, if any of the versions of the software listed below change you'll need to update the build.xml.

Install HSQLDB

Download: hsqldb_1_7_X.zip

File used in this tutorial: hsqldb_1_7_1.zip

URL: http://sourceforge.net/project/showfiles.php?group_id=23316&release_id=117043

Install: Extract the zip file to the hsqldb directory within the apps directory

Install Hibernate

Download: hibernate-2.1.x.zip

File used in this tutorial: hibernate-2.1.3.zip

URL: http://prdownloads.sourceforge.net/hibernate/?sort_by=date&sort=desc

Install: Extract to the hibernate directory inside the apps directory

Install Hibernate extensions

Download: hibernate-extensions-2.1.X.zip

File used in this tutorial: hibernate-extensions-2.1.2.zip

URL: http://prdownloads.sourceforge.net/hibernate/?sort_by=date&sort=desc

Install: Extract to the hibernate-ext directory inside the apps directory

Install Middlegen

Download: Middlegen-Hibernate-rX.zip

File used in this tutorial: Middlegen-Hibernate-r4.zip

URL: http://prdownloads.sourceforge.net/hibernate/?sort_by=date&sort=desc

Install: Extract to the middlegen directory inside the apps directory

Open a command prompt to c:\hibernatetutorial and type "ant setup-middlegen"

OR if you've decided not to use ANT

Copy the following files:

C:\hibernatetutorial\apps\hibernate\lib\commons-lang-1.0.X.jar

C:\hibernatetutorial\apps\hibernate\hibernate2.jar

C:\hibernatetutorial\apps\hibernate-ext\tools\lib\jdom.jar

C:\hibernatetutorial\apps\hibernate-ext\tools\hibernate-tools.jar

to the C:\hibernatetutorial\apps\middlegen\lib directory

Delete the following directories / files:

C:\hibernatetutorial\apps\middlegen\build

C:\hibernatetutorial\apps\middlegen\src

C:\hibernatetutorial\apps\middlegen\build.xml

C:\hibernatetutorial\apps\middlegen\config\database\hsqldb.xml

Copy the build.xml, provided in the hibernatetutorial.zip, to C:\hibernatetutorial\apps\middlegen\. Additionally, copy the hsqldb.xml to the C:\hibernatetutorial\apps\middlegen\config\database\hsqldb.xml.

Install XDoclet

Download: xdoclet-bin-1.X.zip

File used in this tutorial: xdoclet-bin-1.2.zip

URL: http://sourceforge.net/project/showfiles.php?group_id=31602

Install: Extract to the xdoclet directory

Install Spring Framework

Download: spring-framework-1.0.X-with-dependencies.zip

File used in this tutorial: spring-framework-1.0.1-with-dependencies.zip

URL: http://sourceforge.net/project/showfiles.php?group_id=73357

Install: Extract to the spring directory inside the apps directory

Gather up all the jars for our app

Open a command prompt to c:\hibernatetutorial and type "ant copy-jars-to-lib"

OR if you've decided not to use ANT

Hibernate Jars

Copy all the jars from the C:\hibernatetutorial\apps\hibernate\lib

Copy the hibernate2.jar from the C:\hibernatetutorial\apps\hibernate\

to C:\hibernatetutorial\lib\hibernate

Spring Jars

Copy all the jar and dtd files from C:\hibernatetutorial\apps\spring\dist

Copy aopalliance.jar from C:\hibernatetutorial\apps\spring\lib\aopalliance

to C:\hibernatetutorial\lib\spring

HSQLDB Jars

Copy the hsqldb.jar from C:\hibernatetutorial\apps\hsqldb\lib to C:\hibernatetutorial\lib\hsqldb

Setup the HSQLDB database

Launch the HSQLDB GUI

Launch a command prompt to c:\hibernatetutorial\lib\hsqldb directory.

Launch the HSQLDB GUI by typing "java -cp hsqldb.jar org.hsqldb.util.DatabaseManager"

Set the type to: HSQL Database Engine Standalone

Set the URL to: jdbc:hsqldb:../../hsqldb/hibernatetutorial

Leave the rest of the settings alone

Click Ok

Two files were just created that make up the hibernatetutorial database

C:\hibernatetutorial\hsqldb\hibernatetutorial.properties

C:\hibernatetutorial\hsqldb\hibernatetutorial.script

Create the GROUPS Table

Paste the following code into the text box next to the execute button

CREATE TABLE GROUPS (

group_id int NOT NULL IDENTITY,

name LONGVARCHAR(255) NOT NULL,

registration_date DATE NOT NULL,

annual_budget decimal(20,4) NOT NULL

)

Hit execute

Create the USERS Table

Paste the following code into the text box next to the execute button

CREATE TABLE USERS ( user_id int NOT NULL IDENTITY, group_id int, first_name LONGVARCHAR(255) NOT NULL, last_name LONGVARCHAR(255) NOT NULL, dob DATE NOT NULL, ssn LONGVARCHAR(20) NOT NULL,

phone LONGVARCHAR(20) NOT NULL,

salary decimal(20,4) NOT NULL,

active bit DEFAULT 'true' NOT NULL,

foreign key (group_id) references groups (group_id)

)

Hit execute

Close the GUI but leave the console open, we'll be using it in a minute.

Launch the HSQLDB Server

You've just created the groups and users tables we'll be using in our tutorial. Now all we have to do is launch the HSQLDB Server so we can access the database easily from our application.

Open another command prompt to the C:\hibernatetutorial\hsqldb directory. Make sure you don't use the command prompt we launched the HSQLDB GUI from, create another command prompt, because we'll be using it in a minute to test our database. Launch the HSQLDB server by typing "java -cp ../lib/hsqldb/hsqldb.jar org.hsqldb.Server -database hibernatetutorial" at the command prompt. If all went as planned you should see something similar to "Wed Apr 28 17:45:44 EDT 2004 Listening for connections ..." at the bottom of the command prompt. However, if you see "java.sql.SQLException: The database is already in use by another process", make sure you've closed the HSQLDB GUI.

Test the HIBERNATETUTORIAL Database

Relaunch the HSQLDB GUI.

Set the type to: HSQL Database Engine Server

Leave the rest of the settings alone

Click Ok

Assuming everything has gone smoothly you should see the GROUPS and USERS tables in the lefthand tree. Congratulations, you're HSQLDB is now fully operation and you're ready to move on to generating you first Hibernate Mapping files. Once again, leave the HSQLDB GUI open.

Using Middlegen

Launching Middlegen

Open a command prompt to C:\hibernatetutorial\apps\middlegen\Middlegen-Hibernate-r4 and type "ant middlegen." You should now see a screen containing your GROUPS and USERS tables. Click on the title bar of the GROUPS table and change the Key Generator type to "Native." Repeat the same process for USERS table. Click the Generate button and wait for it to turn back to light grey. Close the Middlegen GUI.

In the C:\hibernatetutorial\apps\middlegen\Middlegen-Hibernate-r4 directory there should be two new directories, src and build. Navigate to C:\hibernatetutorial\apps\middlegen\build\gen-src\com\warfrog\hibernatetutorial\hibernate; there should be two files Group.hbm.xml and User.hbm.xml. Open the Group.hbm.xml for editing, we need to make a slight modification. Once you've opened the Group.hbm.xml, scroll down till you see the <set> tag (near the bottom) and add the line:

cascade="save-update"

below 'inverse="true". The <set> tag should now look like this:

<set

name="users"

lazy="true"

inverse="true"

cascade="save-update"

>

Additionally, add

cascade="save-update"

below the "inverse="true"" within the <meta> tag. These modifications inform hibernate that when a Group object is saved it should also save and/or update all the User objects associated to the Group. Save the Group.hbm.xml and exit your editor.

At the middlegen command prompt type "ant hbm2java". Assuming that all went well you should see two new .java files (Group.java and User.java) inside the C:\hibernatetutorial\apps\middlegen\Middlegen-Hibernate-r4\build\gen-src\com\warfrog\tutorial\hibernate directory. Both java files should contain all the Hibernate XDoclet information required to generate the Group and User hbm.xml files and from the hbm.xml files you can generate the Database schema using the hbm2ddl tool, gotta love full circle development.

Using Hibernate

Setup the Eclipse Project

Open a command prompt to c:\hibernatetutorial and type "ant setup-eclipse-project"

OR if you've decided not to use ANT

Move to C:\java\eclipse\workspace\hibernatetutorial. Copy the "com" directory from the C:\hibernatetutorial\apps\middlegen\build\gen-src\ directory to C:\java\eclipse\workspace\hibernatetutorial\src. Additionally, copy C:\hibernatetutorial\lib directory to C:\java\eclipse\workspace\hibernatetutorial. Finally, copy all the files from the hibernatetutorial.zip\project files into C:\java\eclipse\workspace\hibernatetutorial.

Add the JARs to your eclipse classpath

First, right click on the "hibernatetutorial" folder icon and select "Refresh". Now, right click on the "hibernatetutorial" folder icon and select Properties. Click on the Java Build path, then the "Libraries" tab and hit the "Add JARs" button. Navigate to your hibernatetutorial\lib directory and add all the jars from each folder (hibernate, hsqldb, spring, etc.). Once you've selected all of the jars, click the Ok button.

Note: use SHIFT+ LEFT_CLICK to select a "block" of jars.

Testing your Hibernate project

Double click on the HibernateTutorial.java (found under default package inside eclipse), then click the arrow on the right hand side of the "running man" icon, then select Run As->Java Application. Click Ok to any prompts. If you've setup everything correctly, you should see a bunch of data scroll and some insert statements executing. Execute "SELECT * FROM GROUPS" inside the HSQLDB GUI and "SELECT * FROM USERS" to verify that the data is in the database. One record should be returned from the GROUPS table and 5 records from the USERS table. Congratulations, you now have a working Hibernate program.

Adding in Spring

Adding Spring into the mix

I've provided the required files to integrate Spring into the project (UserDAO.java, UserDAOImpl.java, applicationContext.xml, ApplicationContextFactory.java, and HibernateSpringTutorial.java). The UserDAO object provides a few sample "find" methods to simply retrieval of User objects. Additionally, the applicationContext.xml provides information to the Spring framework about sessions, transactions, etc.

Named Queries

A nice feature of Hibernate is the ability to place queries outside of code and in the .hbm.xml files, called named queries. In this section we'll modify the User.hbm.xml and insert a named query. Open the User.hbm.xml inside Eclipse for editing. Depending on your settings you may have to right click on the User.hbm.xml and select Open With -> Text Editor. Scroll down to the bottom of the file and modify

</class>

</hibernate-mapping>

to this:

</class>

<query name="UsersByDobRange">

<![CDATA[from User user where user.dob between ? AND ?]]>

</query>

</hibernate-mapping>

Testing your Hibernate Spring project

Double click on the HibernateSpringTutorial.java (found under the default package inside eclipse), then click the arrow on the right hand side of the "running man" icon, then select Run As->Java Application. Click Ok to any prompts. If you've setup everything correctly, you should see a bunch of data scroll and SQL statements and then two exceptions being thrown. The first exception was caught inside a transaction and rolled back when the exception was throw, because we instructed Spring, inside the applicationContext.xml, to "wrap" a transaction around the "addGroupSafe" method of the UserDAOImpl class. The second exception thrown wasn't rolled back, resulting in a "MALFORMED_GROUP_2" group entry being added to our database. You can tell the "addSafe" method call was rolled back by executing "SELECT * FROM GROUPS" in the HSQLDB GUI. You should see an entry for MALFORMED_GROUP_2, but not MALFORMED_GROUP_1. In the next section we'll make a slight modification to the applicaionContext.xml and wrap both methods in transactions.

Modifying the Transactions

Spring allows you to remove all of the messy session.beginTransaction, commit(), rollback(), etc. code from you method calls. With Spring you can define what methods utilize transactions and which methods don't using the Application Context. In this section we'll modify the applicationContext.xml to allow Spring to handle the transaction management for the "malformed" addGroup calls.

Open the applicationContext.xml inside Eclipse for editing. Once you have the file opened, scroll down to the bottom of the file where you see these lines:

<prop key="addGroupSafe">PROPAGATION_REQUIRED</prop>

<!--<prop key="addGroup*">PROPAGATION_REQUIRED</prop>-->

modify them so they look like this

<!--<prop key="addGroupSafe">PROPAGATION_REQUIRED</prop>-->

<prop key="addGroup*">PROPAGATION_REQUIRED</prop>

What you've done is told spring to lookout for any method starting with the signature "addGroup" and wrap it in a transaction. Save the modified applicationContext.xml and re-run HibernateSpringTutorial.java. Once the program has finished executing, you should notice that both "malformed" save calls where rolled back by Spring. If you, once again, execute "SELECT * FROM GROUPS" inside the HSQLDB GUI, you'll noticed that no new groups have been inserted into the table.

XDoclet

Launching XDoclet

I've included a build.xml that will allow you to generate hbm.xml files from the Java source files we generated in the MiddleGen section. Select "Run Ant", making sure the "generate-hbm-from-xdoclet" task is checked and press Ok. You should see some output similar to the lines below:

Buildfile: C:\java\eclipse\workspace\hibernatetutorial\build.xml

generate-hbm-from-xdoclet:

[hibernatedoclet] (XDocletMain.start 47 ) Running <hibernate/>

[hibernatedoclet] Generating mapping file for com.warfrog.hibernatetutorial.hibernate.Group.

[hibernatedoclet] com.warfrog.hibernatetutorial.hibernate.Group

[hibernatedoclet] Generating mapping file for com.warfrog.hibernatetutorial.hibernate.User.

[hibernatedoclet] com.warfrog.hibernatetutorial.hibernate.User

BUILD SUCCESSFUL

Total time: 3 seconds

Now, right click on the hibernatetutorial icon and select Refresh. This should cause a new folder, xdoclet.com.warfrog.hibernatetutorial.hibernate, to appear under your src folder. Inside the xdoclet folder you'll find the Group.hbm.xml and User.hbm.xml files that were generated by XDoclet. If you compare the hbm.xmls generated by Middlegen and hbm.xmls generated by XDoclet you'll notice that Date fields have been converted from type "java.sql.Date" to "java.util.Date." Additionally, you'll notice that XDoclet has inserted some default values that we didn't supply in our Java XDoclet metadata, fortunately neither of these modification should cause any problems.

Conclusion

Conclusion

Hopefully, this tutorial has allowed you to get Hibernate, Spring, Middlegen, and XDoclet working and given you a good basis for building future projects using these great tools. Additionally, you should now have a development process that allows you to start with a Database, generate the Mappings, generate the Java objects, and start using them quickly. From theret you can modify the Java objects, regenerate the mappings and using hdm2ddl update the database, if you'd like. As I stated previously, if you have any questions or comments please contact me at either the IRC Handle or the email address listed in the resource section. If you enjoyed part 1 of this tutorial you should move on to part 2 where I provide additional information on creating Many 2 Many and Inheritance mappings using Hibernate and Middlegen.

Cheers,

Tyler Pitchford

Senior Developer - Warfrog.com

Resources

Other tutorials

Warfrog Hibernate tutorial series part 2 - Hibernate / Middlegen: http://www.warfrog.com/hibernatetutorial2

Introduction to Hibernate: http://www.systemmobile.com/articles/IntroductionToHibernate.html

MiddleGen-Hibernate Example: http://www.systemmobile.com/articles/IntroductionToHibernate.html

Object-relation mapping without the container: http://www-106.ibm.com/developerworks/library/j-hibern/?ca=dnt-515

Object to Relational Mapping and Relationships with Hibernate: www.meagle.com:8080/hibernate.jsp

Links

Ant: http://ant.apache.org/

Ant Documentation: http://ant.apache.org/manual/index.html

Eclipse: http://www.eclipse.org/

Eclipse Documentation: http://www.eclipse.org/

Hibernate: http://www.hibernate.org

Hibernate Documentation: http://www.hibernate.org/hib_docs/reference/en/html/

Spring: http://www.springframework.org/

Spring Documentation: http://www.springframework.org/documentation.html

Middlegen: http://boss.bekk.no/boss/middlegen/

Middlegen Documenation: http://boss.bekk.no/boss/middlegen/project-info.html

XDoclet: http://xdoclet.sourceforge.net/

XDoclet Documenation: http://xdoclet.sourceforge.net/project-info.html

Hibernate - Xdoclet: http://www.hibernate.org/72.html

Hibernate - Spring: http://hibernate.bluemars.net/110.html

IRC Help

#hibernate on irc.freenode.org

#spring on irc.freenode.org

#java on irc.freenode.org

Contact Info

IRC Handle: TdC_VgA

tyler_pitchford <remove>at<remove> yahoo.com

Downloads

Tutorial Files: hibernatetutorial.zip

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
2023年上半年GDP全球前十五强
 百态   2023-10-24
美众议院议长启动对拜登的弹劾调查
 百态   2023-09-13
上海、济南、武汉等多地出现不明坠落物
 探索   2023-09-06
印度或要将国名改为“巴拉特”
 百态   2023-09-06
男子为女友送行,买票不登机被捕
 百态   2023-08-20
手机地震预警功能怎么开?
 干货   2023-08-06
女子4年卖2套房花700多万做美容:不但没变美脸,面部还出现变形
 百态   2023-08-04
住户一楼被水淹 还冲来8头猪
 百态   2023-07-31
女子体内爬出大量瓜子状活虫
 百态   2023-07-25
地球连续35年收到神秘规律性信号,网友:不要回答!
 探索   2023-07-21
全球镓价格本周大涨27%
 探索   2023-07-09
钱都流向了那些不缺钱的人,苦都留给了能吃苦的人
 探索   2023-07-02
倩女手游刀客魅者强控制(强混乱强眩晕强睡眠)和对应控制抗性的关系
 百态   2020-08-20
美国5月9日最新疫情:美国确诊人数突破131万
 百态   2020-05-09
荷兰政府宣布将集体辞职
 干货   2020-04-30
倩女幽魂手游师徒任务情义春秋猜成语答案逍遥观:鹏程万里
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案神机营:射石饮羽
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案昆仑山:拔刀相助
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案天工阁:鬼斧神工
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案丝路古道:单枪匹马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:与虎谋皮
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:李代桃僵
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:指鹿为马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:小鸟依人
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:千金买邻
 干货   2019-11-12
 
推荐阅读
 
 
 
>>返回首頁<<
 
靜靜地坐在廢墟上,四周的荒凉一望無際,忽然覺得,淒涼也很美
© 2005- 王朝網路 版權所有