编程出错小心挨枪子-Scooter1.1让子弹飞!
- 编译错误音像提醒
- Active Record的查询接口
- Active Record 支持非缺省数据库联结
- 更好的HTTP请求支持
- 支持SQL Server数据库
- 支持FreeMarker模板
- 从任何数据库生成脚手架(scaffold)程序
放心。 没人会因编程出错中枪。但你还是会听到枪声。只是为了好玩吧。
编程不光要有效率,还要有乐趣。在这一版中,我们继续沿着这一方向前进。以下是本版新引近的主要功能。浏览本版的全部新功能,请按这里。
编译错误音像提醒
Scooter会在你编程出错时提醒你。我们不妨试一下。
1. 打入以下命令,启动Scooter自带的Hello World例子:
>java -jar tools/server.jar examples/greeting
2. 打开Java文件: greeting/WEB-INF/src/greeting/controllers/HelloController.java
3. 有意通过删除一个分号‘;’来制造编程错误
4. 保存文件。这时你应该听到一声枪响。
5. 浏览 http://localhost:8080/greeting。你会看到如下页面:
6. 点击文件链接。你可以在线编辑此文件。(用户名/密码:admin/welcome)
猜猜编译成功时,会听到什么声音?自己动手试一下吧。
Active Record的查询接口
Scooter现在支持类似Rails3.0的查询接口。
以下是新的查询接口实例。点击这里获取更多例子。
//提取名叫Leo的宠物
ActiveRecord Leo = Pet.where("name='Leo'").getRecord();
//提取id是6和10的宠物,结果按出生日期倒排序
List pets = Pet.where("owner_id IN (6, 10)").orderBy("birth_date DESC").getRecords();
//提取3条记录,省去前5条记录,结果按name排序
List pets = Pet.limit(3).offset(5).orderBy("name").getRecords();
//提取姓名是以E开头的人以及他们的宠物的记录
List owners = Owner.where("last_name='E%'").includes("pets").getRecords();
上面最后一个例子用到了includes()方法和两个表pets以及owners. 只有一个SQL被执行。这就是Scooter如何做到eager loading的。
Active Record 支持非缺省数据库联结
通过overriding getConnectionName() 方法,你可以指定ActiveRecord到专门的数据库。
//Post记录从blog_development(缺省)数据库提取出来
public class Post extends ActiveRecord {
}
//Post记录从blog_mysql数据库提取出来
public class Post extends ActiveRecord {
public String getConnectionName() {
return "blog_mysql";
}
}
ActiveRecord post = Post.newRecord();
post.setData("content", "Java programming is fun.");
post.create();//create a new record in the posts table in blog_mysql.
ActiveRecord post10 = Post.findById(10);//retrieve post record with id #10.
你甚至可以join指向不同的数据库的ActiveRecord model。 点击这里获取更多说明。
更好的HTTP请求支持
现在你有更多的方法在controller类中来处理HTTP请求。
//获取HTML表单中的选择列表(Selection list)或复选框(Checkboxes)信息
String[] selectedEmployees = pArray("employees");
//获取HTML表单中的单选按钮(Radio Buttons)信息
Boolean gender = pBoolean("sex");
//获取HTML表单中文本域(Text Fields)日期
Date birthday = pDate("birthday");
你也可以指定日期的格式,使用pFile()和pFiles()来处理上传文件。点击这里获取更多说明。
Greeting项目的例3中具体演示了如何处理HTML表单中各种不同的类型(http://localhost:8080/greeting/examples)。
支持SQL Server数据库
Scooter现在支持SQL Server数据库。下面让我们来做一个基于SQL Server和AJAX的应用。你事先要从微软网站下载AdventureWorks实例数据库。
1. 生成一个名为adventureworks的应用.
>java -jar tools/create.jar adventureworks sqlserver
2. 修改adventureworks/WEB-INF/config/database.properties文件中的adventureworks_development条目,加入数据库用户名以及密码。
database.connection.aw=\ driver=com.microsoft.sqlserver.jdbc.SQLServerDriver,\ url=jdbc:sqlserver://localhost:1433;databaseName=adventureworks,\ username=sa,\ password=welcome,\ max_pool_size=10,\ min_pool_size=1
3. 启动web服务器
>java -jar tools/server.jar adventureworks
4. 浏览AdventureWorks数据库
http://localhost:8080/adventureworks/admin/databases/adventureworks_development/tables
5. 下面让我们来做一个基于AJAX的应用来管理product架构(Schema)中的location表。
5.1 首先,在adventureworks/WEB-INF/config/database.properties文件中设use.plural.table.name为false。
缺省值是true。AdventureWorks数据库不用名词复数来命名表。
5.2 生成AJAX应用。
>java -jar tools/generate.jar adventureworks scaffold-ajax production.location
6. 浏览product架构(Schema)中的location表: 我们可以增删查改表中的记录而不用离开页面了。
http://localhost:8080/adventureworks/productionlocations
更多AJAX用法,参见这里。
支持Freemarker模板
除了JSP和StringTemplate模板,Scooter现在支持FreeMarker模板。你甚至可以把它们混合使用。
你可以通过改动返回语句来看不同模板的调用。例如改动greeting/WEB-INF/src/greeting/controllers/WelcomeController.java文件的返回语句。 模板文件在greeting/WEB-INF/views/welcome目录下。
public class WelcomeController {
public String sayit() {
flash("notice", "Successfully found the message");
setViewData("content", "Java programming is fun!");
//render default view (.jsp)
return renderView("sayit");
//render FreeMarker view
//return renderView("sayit.ftl");
//render StringTemplate view
//return renderView("sayit.st");
}
}
浏览以下URL验示你的改动。每次改动不需要重启web server。
http://localhost:8080/greeting/welcome/sayit
更多关于Scooter表视层,可在这里找到。
从任何数据库生成脚手架(scaffold)程序
使用Scooter现在可以从任何数据库生成脚手架(scaffold)程序了。
下面的例子生成基于Oracle数据库里posts表的脚手架(scaffold)程序:
>java -jar tools/generate.jar blog scaffold post@blog_oracle
你可以通过以下URL来浏览posts记录:
http://localhost:8080/blog/posts
更多关于程序生成,可打入以下命令::
>java -jar tools/generate.jar -help
关于Scooter工具的更多帮助,可在这里找到。