开发环境
本文中使用的 Play 框架的版本是 1.0.3.1,使用的集成开发环境是 Eclipse 3.6, 使用 Dojo 作为 JavaScript 框架。在 Play 框架官方网站(见 参考资料)下载 Play 框架的压缩包之后,解压到某个目录,并把该目录下面的 bin 目录添加到环境变量中。接着启动一个命令窗口,运行 play new developers_notebook 就可以创建出一个新的名为 developers_notebook 的 Web 项目。在项目目录的父目录下面,运行 play eclipsify developers_notebook 就可以创建出来 Eclipse 工程。通过 Eclipse 导入此工程就可以在 Eclipse 里面进行开发了。Play 框架的 support 目录下的 eclipse 目录下有个名为 org.playframework.playclipse 的 Eclipse 插件,将此插件复制到 Eclipse 的 plugins 目录就可以安装。运行 play run 就可以运行此 Web 应用,访问 http://localhost:9000就可以看到。每次在 Eclipse 里面修改了代码之后,不需要重新启动应用,只需要刷新页面就能看到更新之后的结果。这是 Play 框架的一个非常方便的特性。
本文中的示例应用称为“开发人员记事本”。开发人员可以用它来记录开发过程中的一些注意事项。下面首先介绍 Play 框架中的模型层。
模型层
模型层包含的是 Web 应用中的领域对象。Play 框架推荐的实践是模型层的对象不应该是仅包含 getter/setter 方法的简单 Java Beans,而应该有自己的业务逻辑。Play 框架中应用的模型层类可以是任何的 Java 类。与一般的 Java Beans 不同的是,模型层类使用声明为 public 的域作为对象的属性。Play 框架会自动生成相应的 getter/setter 方法。这样可以使得代码更加简洁。开发人员也可以提供自己的 getter/setter 方法实现。
领域对象持久化
领域对象的实例一般需要持久化下来。最常见的持久化方式就是使用关系数据库。Play 框架使用 JPA 规范来进行领域对象的持久化。具体的后台实现使用的是 Hibernate。开发人员只需要使用 JPA 规范定义的标注,就可以声明领域的持久化行为。比较好的做法是将领域对象类继承自 Play 框架提供的 play.db.jpa.Model 类。play.db.jpa.Model 类提供了一个域 id作为对象的标识符,也是对应的数据库表中的主键。play.db.jpa.JPASupport 类是 play.db.jpa.Model的父类,提供了一些实用方法用来完成从领域对象到数据库之间的映射。表 1 中列出了一些重要的方法,包括常用的增删改查操作。
表 1. play.db.jpa.JPASupport API 说明
方法 | 说明 |
create(type, name, params) | 用来创建领域对象类的一个实例。参数 type 表示的是领域对象类,类型是 java.lang.Class ;name 表示的是领域对象类的名称;params 表示的是一个包含了实例中属性值的类型为 java.util.Map<java.lang.String,java.lang.String[]> 的哈希表。 |
edit(obj, name, params) | 用来编辑领域对象类的一个实例。参数 obj 表示的是领域对象实例;参数 name 和 params 的含义与 create() 方法的相同。 |
delete() | 用来删除单个领域对象类的实例。 |
delete(query, params) | 用来删除多个领域对象类的实例。参数 query 表示的是检索待删除实例的查询,而 params 表示的是查询所使用的参数。 |
deleteAll() | 用来删除领域对象类的所有实例。 |
find(query, params) | 用来查找领域对象类的实例。参数 query 表示的是查找时所用的查询,而 params 表示的是查询所使用的参数。 |
findAll() | 用来查找领域对象的所有实例。 |
findById(id) | 用来根据标识符查找领域对象的实例。 |
count(query, params) | 用来计算某个查询结果中包含的领域对象的实例数。参数 query 和 params 的含义与 find() 方法相同。 |
save() | 用来保存该领域对象实例到数据库中。 |
all() | 用来查找系统中的全部领域对象的实例。 |
表 1 中列出的方法中,find() 和 all() 方法的返回值是 play.db.jpa.JPASupport.JPAQuery 类的实例,表示一个领域对象实例的查询结果。对于此查询结果,可以进行进一步的操作。具体的操作,如 表 2 所示。