`
xgbjmxn
  • 浏览: 259869 次
  • 性别: Icon_minigender_1
  • 来自: 新乡
社区版块
存档分类
最新评论

使用 Spring Roo 从零开始,一步步的创建一个简单的 Spring 程序

阅读更多
使用 Spring Roo 从零开始,一步步的创建一个简单的 Spring 程序。

SpringSource 刚刚发布最新版本 1.0.0m1 ,参见 Spring Roo 1.0.0.M1 Released。
相对之前的 alpha 2 ,这一版本中带来不少的新特性,下面发行说明中的罗列的新特性。

    * Much easier installation
    * 31% better performance
    * Tomcat support (for embedded usage)
    * JMS support (including ActiveMQ setup)
    * Selenium support
    * Email support
    * Web Flow installation
    * Additional samples
    * Various other fixes and improvements


在 Spring Roo 提供完整的官方文档之前 ,SpringSource 网站博客上提供入门文章 便是不可多得的学习资料,我这里也是根据文章进行操作的。
从 SpringSource 网站上下载 Spring ROO 1.0.0 m1 ,解压到硬盘上。
将 <spring_roo_dir>/bin  加入到系统的PATH变量中。在 Linux 系统上,你可以直接创建一个链接到 ~/bin 或 /usr/bin/ 中。

ln -sf <spring_roo_dir>/bin/roo.sh /home/<user>/bin/roo

注意,之前的 alpha 中要求设置 ROO_HOME 环境变量,现在不需要了,请将其删除。

另外, Spring Roo 需要 Maven 支持,你必须安装一个 2.0.9 以上的版本,参考用Maven 构建项目。

下面就可以开始创建一个新的Spring 项目。

1. 创建一个项目。
[hantsy@localhost ~]$ mkdir roodemo
[hantsy@localhost ~]$ cd roodemo

[hantsy@localhost roodemo]$ roo
    ____  ____  ____ 
   / __ \/ __ \/ __ \
  / /_/ / / / / / / /
/ _, _/ /_/ / /_/ / 
/_/ |_|\____/\____/    1.0.0.M1 [rev 64]


Welcome to Spring Roo. For assistance press TAB or type "hint" then hit ENTER.

任何时候你可以输入hint 来获得一些操作建议。

roo> hint
Welcome to Roo! We hope you enjoy your stay!

Before you can use many features of Roo, you need to start a new project.

To do this, type 'create project' (without the quotes) and then hit TAB.

Enter a -topLevelPackage like 'com.mycompany.projectname' (no quotes).
When you've finished completing your -topLevelPackage, press ENTER.
Your new project will then be created in the current working directory.

Note that Roo frequently allows the use of TAB, so press TAB regularly.
Once your project is created, type 'hint' and ENTER for the next suggestion.
You're also welcome to visit http://forum.springframework.org for Roo help.

roo> cre           

这时按 Tab 键,你会发现 Spring Roo 会帮你自动补全命令 create project。

Linux 用户对 Tab 的使用再也熟悉不过了,在 Spring Roo 的命令行,你随时都使用 tab 来辅助命令的输入。

roo> create project

这里按下 enter ,会得到一条提示信息。

You must specify a default option (otherwise known as option 'topLevelPackage') for this command

指定一个 topLevelPackage 参数,它是项目的基础包名。再次提醒,这里你仍然可以 create project - 按 tab 来自动补全。

roo> create project -topLevelPackage roodemo
Created /home/hantsy/Projects/roodemo/pom.xml
Created SRC_MAIN_JAVA
Created SRC_MAIN_RESOURCES
Created SRC_TEST_JAVA
Created SRC_TEST_RESOURCES
Created SRC_MAIN_WEBAPP
Created SRC_MAIN_RESOURCES/applicationContext.xml
Created SRC_MAIN_WEBAPP/WEB-INF
Created SRC_MAIN_WEBAPP/WEB-INF/roodemo-servlet.xml
Created SRC_MAIN_WEBAPP/WEB-INF/web.xml
Created SRC_MAIN_WEBAPP/WEB-INF/jsp
Created SRC_MAIN_WEBAPP/WEB-INF/jsp/index.jsp
Created SRC_MAIN_WEBAPP/WEB-INF/urlrewrite.xml

这里会生成一个标准 maven web 项目,目录结构如下。

.
|-- pom.xml
`-- src
    |-- main
    |   |-- java
    |   |-- resources
    |   |   `-- applicationContext.xml
    |   `-- webapp
    |       `-- WEB-INF
    |           |-- jsp
    |           |   `-- index.jsp
    |           |-- roodemo-servlet.xml
    |           |-- urlrewrite.xml
    |           `-- web.xml
    `-- test
        |-- java
        `-- resources

Spring Roo 已经帮你添加最基本的Spring 配置。
你可以把项目导入到eclipse进行编辑。
在项目根目录中运行 mvn eclipse:eclipse ,会生成 Eclipse 相关的特殊文件,如.classpath , .project等。
现在你可以像导入一个普通项目那样将这个项目导入到你的workspace中。


2. 设置数据库。

在持久层技术上选择,Roo 提供了多jpa实现的选择,和多种数据库选择。

这里如果输入hint,会得到以下信息。
roo> hint
Roo requires the installation of a JPA provider and associated database.

Type 'install jpa' and then hit TAB three times.
We suggest you type 'H' then TAB to complete "HIBERNATE".
After the -provider, press TAB twice for database choices.
For testing purposes, type (or TAB) HYPERSONIC_IN_MEMORY.
If you press TAB again, you'll see there are no more options.
As such, you're ready to press ENTER to execute the command.

Once JPA is installed, type 'hint' and ENTER for the next suggestion.

任何时候,不要忘记使用 hint 来获得提示。

roo> install jpa -    

按 tab 可以看到所提供的参数选项。

install jpa -database    install jpa -provider

输入 -p 按 tab 自动补全 -provider 。

roo> install jpa -provider

按 tab 可以看到几种可用的 jpa 实现。

ECLIPSELINK    HIBERNATE      OPENJPA

接着输入首字母 H 按tab,补全 HIBERNATE,再输入-d 按 tab,补全-database。

roo> install jpa -provider HIBERNATE -database

H2_IN_MEMORY             HYPERSONIC_IN_MEMORY     HYPERSONIC_PERSISTENT
MSSQL                    MYSQL                    ORACLE
POSTGRESQL               SYBASE

最后输入MY 按 tab 选择MySQL 数据库。

roo> install jpa -provider HIBERNATE -database MYSQL
Created SRC_MAIN_RESOURCES/META-INF
Created SRC_MAIN_RESOURCES/META-INF/persistence.xml
Created SRC_MAIN_RESOURCES/database.properties
please enter your database details in src/main/resources/database.properties
Managed SRC_MAIN_RESOURCES/applicationContext.xml
Managed ROOT/pom.xml
Managed ROOT/pom.xml
Managed ROOT/pom.xml
Managed ROOT/pom.xml
Managed ROOT/pom.xml
Managed ROOT/pom.xml
Managed ROOT/pom.xml
Managed ROOT/pom.xml
Managed ROOT/pom.xml
Managed ROOT/pom.xml

现在如果比较之前生成的代码,你会发现,Spring Roo 已经帮你在Spring配置文件 applicationContext.xml 中配置好了相应的数据库的 Data Source,并且生成了相的相应的数据库配置模板(src/main/resources/database.properties),在 pom.xml 文件中已经添加 jpa ,数据库驱动相关的依赖。

现在你可以查看默认生成的数据库配置。
roo> database properties
database.driverClassName = com.mysql.jdbc.Driver
database.password =
database.url = jdbc:mysql://localhost:3306
database.username =

你可以手动修改数据库配置,也可以在 Spring Roo 命令行中完成。

设置数据库用户名。

roo> database set -key database.username -value root
Managed SRC_MAIN_RESOURCES/database.properties

设置数据库密码。

roo> database set -key database.password -value root
Managed SRC_MAIN_RESOURCES/database.properties

设置数据库url连接地址。

roo> database set -key database.url -value jdbc:mysql://localhost:3306/posts?useUnicode=true&characterEncoding=UTF-8
Managed SRC_MAIN_RESOURCES/database.properties

在MySQL 数据库创建创建数据库posts,在Terminal 使用mysqladmin 命令,你也可以使用自己熟悉的 MySQL 客户端工具来完成。

mysqladmin create posts --default-character-set=utf8  -uroot -p

输入密码,一个posts数据库就创建好了。

现在我们回到 roo shell中,查看一下数据库配置。

roo> database properties
database.driverClassName = com.mysql.jdbc.Driver
database.password = root
database.url = jdbc:mysql://localhost:3306/posts?useUnicode=true&characterEncoding=UTF-8
database.username = root

所有的数据库配置选项已经修改了。

3. 创建 Domain Class
现在如果输入 hint ,可以看到以下信息。

roo> hint                                        
You can create entities either via Roo or your IDE.
Using the Roo shell is fast and easy, especially thanks to the TAB completion.

Start by typing 'new p' and then hitting TAB twice.
Enter the -name in the form '~.domain.MyEntityClassName'
In Roo, '~' means the -topLevelPackage you specified via 'create project'.

Afer specify a -name argument, press SPACE then TAB. Note nothing appears.
Because nothing appears, it means you've entered all mandatory arguments.
However, optional arguments do exist for this command (and most others in Roo).
To see the optional arguments, type '-' and then hit TAB. Mostly you won't
need any optional arguments, but let's select the -testAutomatically option
and hit ENTER. You can always use this approach to view optional arguments.

After creating an entity, use 'hint' for the next suggestion.

创建一个 Post 类。
roo> new persistent class jpa -name ~.domain.Post -

按下 Tab ,你有三种选择,你可以创建一个抽象类,或者从其它类继承。

new persistent class jpa -name ~.domain.Post -abstract
new persistent class jpa -name ~.domain.Post -extends
new persistent class jpa -name ~.domain.Post -testAutomatically

这里输入 t 按 Tab 键选择 -testAutomatically 同时创建一个测试类。

roo> new persistent class jpa -name ~.domain.Post -testAutomatically
Created SRC_MAIN_JAVA/roodemo/domain
Created SRC_MAIN_JAVA/roodemo/domain/Post.java
Created SRC_TEST_JAVA/roodemo/domain
Created SRC_TEST_JAVA/roodemo/domain/PostDataOnDemand.java
Created SRC_TEST_JAVA/roodemo/domain/PostIntegrationTest.java
Created SRC_MAIN_JAVA/roodemo/domain/Post_Roo_Plural.aj
Created SRC_MAIN_JAVA/roodemo/domain/Post_Roo_Entity.aj
Created SRC_MAIN_JAVA/roodemo/domain/Post_Roo_ToString.aj
Created SRC_MAIN_JAVA/roodemo/domain/Post_Roo_Configurable.aj
Created SRC_TEST_JAVA/roodemo/domain/PostIntegrationTest_Roo_Configurable.aj
Created SRC_TEST_JAVA/roodemo/domain/PostDataOnDemand_Roo_DataOnDemand.aj
Created SRC_TEST_JAVA/roodemo/domain/PostIntegrationTest_Roo_IntegrationTest.aj
Created SRC_TEST_JAVA/roodemo/domain/PostDataOnDemand_Roo_Configurable.aj

这里 ~ 代表创建项目指定的 topLevelPackage 值。所有的 .aj 文件都是 AspectJ 文件 ,对于不熟悉AspectJ 的人来讲,可能对生成的代码有些令人费解。
不过,我们完全没有必要关心 .aj 的内容,可以以此为基础添加自己的代码。
下面往 Post 中添加一些字段,这里全部略去了Roo shell 的输出。

roo> add field string -fieldName title -notNull -sizeMax 200
roo> add field string -fieldName content -notNull -sizeMax 2000
roo> add field date jpa -fieldName createdDate -type java.util.Date
roo> add field date jpa -fieldName modifiedDate -type java.util.Date

创建另外一个类 Comment。

roo> new persistent class jpa -name ~.domain.Comment -testAutomatically
roo> add field string -fieldName name -notNull -sizeMax 200
roo> add field string -fieldName email -notNull -sizeMax 50
roo> add field string -fieldName content
roo> add field string -fieldName url
roo> add field date jpa -fieldName createdDate -type java.util.Date

添加关联关系。
roo> add field set jpa -fieldName comments -element ~.domain.Comment -class ~.domain.Post -mappedBy post
roo> add field reference jpa -fieldName post -type ~.domain.Post -class ~.domain.Comment

如果细心的话你可以注意,这里我们指定了一个 -class 参数,在默认情况下,不添加 -class 参数会修改刚刚创建类,而这里通过 -class 参数可以指定将内容添加到哪个类中。


4. 创建 Web Controller类

Spring 可以为我们生成最基本的CURD页面。

roo> new controller automatic -formBackingObject roodemo.domain.Post -name roode roodemo.web.PostController 
Created SRC_MAIN_JAVA/roodemo/web
Created SRC_MAIN_JAVA/roodemo/web/PostController.java
Created SRC_MAIN_JAVA/roodemo/domain/CommentEditor.java
Created SRC_MAIN_JAVA/roodemo/web/PostController_Roo_Controller.aj
Created SRC_MAIN_WEBAPP/images
Created SRC_MAIN_WEBAPP/images/banner-graphic.png
Created SRC_MAIN_WEBAPP/images/springsource-logo.png
Created SRC_MAIN_WEBAPP/images/list.png
Created SRC_MAIN_WEBAPP/images/show.png
Created SRC_MAIN_WEBAPP/images/create.png
Created SRC_MAIN_WEBAPP/images/update.png
Created SRC_MAIN_WEBAPP/images/delete.png
Created SRC_MAIN_WEBAPP/styles
Created SRC_MAIN_WEBAPP/styles/roo.css
Created SRC_MAIN_WEBAPP/WEB-INF/jsp/header.jsp
Created SRC_MAIN_WEBAPP/WEB-INF/jsp/footer.jsp
Created SRC_MAIN_WEBAPP/WEB-INF/jsp/includes.jsp
Created SRC_MAIN_WEBAPP/WEB-INF/jsp/dataAccessFailure.jsp
Created SRC_MAIN_WEBAPP/WEB-INF/jsp/uncaughtException.jsp
Created SRC_MAIN_WEBAPP/WEB-INF/jsp/post
Created SRC_MAIN_WEBAPP/WEB-INF/jsp/post/list.jsp
Created SRC_MAIN_WEBAPP/WEB-INF/jsp/post/show.jsp
Created SRC_MAIN_WEBAPP/WEB-INF/jsp/post/create.jsp
Created SRC_MAIN_WEBAPP/WEB-INF/jsp/post/update.jsp
Created SRC_MAIN_WEBAPP/WEB-INF/jsp/menu.jsp
Managed SRC_MAIN_WEBAPP/WEB-INF/jsp/menu.jsp
Created SRC_MAIN_JAVA/roodemo/domain/CommentEditor_Roo_Editor.aj

roo> new controller automatic -formBackingObject ~.domain.Comment -name ~.web.CommentController
Created SRC_MAIN_JAVA/roodemo/web/CommentController.java
Created SRC_MAIN_JAVA/roodemo/domain/PostEditor.java
Created SRC_MAIN_JAVA/roodemo/web/CommentController_Roo_Controller.aj
Created SRC_MAIN_WEBAPP/WEB-INF/jsp/comment
Created SRC_MAIN_WEBAPP/WEB-INF/jsp/comment/list.jsp
Created SRC_MAIN_WEBAPP/WEB-INF/jsp/comment/show.jsp
Created SRC_MAIN_WEBAPP/WEB-INF/jsp/comment/create.jsp
Created SRC_MAIN_WEBAPP/WEB-INF/jsp/comment/update.jsp
Managed SRC_MAIN_WEBAPP/WEB-INF/jsp/menu.jsp
Created SRC_MAIN_JAVA/roodemo/domain/PostEditor_Roo_Editor.aj

5. 运行程序
退出roo shell,在项目根目录中运行 mvn tomcat:run ,以嵌入式方式运行 tomcat。
浏览器打开 http://localhost:8080/ 。


接下的一些博文会关注如何添加一些其它功能,如安全,邮件等。
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics