在Velocity模板中定义数据库查询

时间:2013-01-17 08:24:34

标签: java velocity

我正在研究可以在我的项目中用作模板引擎的各种库,现在Apache Velocity看起来像个好人。我对它的用法有以下疑问:

是否可以在模板中指定SQL数据库查询并使用查询的返回值来填充参数?我在Velocity用户指南中找到了以下示例:

Hello,

#set( $result = $query.criteria("name") )
Your username is $result.

然而,该指南并没有解释执行SQL查询的问题。是否可以定义一个SQL SELECT查询,该查询返回一个值并将该值赋给模板中的变量?我想知道下面的例子是否可能?

Hello,

#set( $result = $executeQuery("SELECT name FROM user") )
Your username is $result.

如果你能对此有所了解,将不胜感激。有人提供一个例子,或者指出我可以找到关于此的其他文档的位置吗?

3 个答案:

答案 0 :(得分:3)

我建议使用http://velosurf.sourceforge.net/之类的内容,而不是直接嵌入查询。

答案 1 :(得分:2)

Velocity是一个非常轻量级的模板引擎,它本身的功能非常少。它通过在上下文中定义(由您)到模板文件中的interpolating个变量来工作。默认情况下,上下文为为空,表示模板没有变量可供使用。 Velocity不允许实例化自定义类的新对象,它允许您使用的是字符串和数字文字,以及地图和列表:

#set ($n = 5)
#set ($s = 'Hello New World!')
#set ($m = {'four' : 4, 'five' : $n})
#set ($a = ['x', 'y', 'z'])

通过在插值前用有用的对象填充上下文,你有责任使Velocity“智能”。作为起点,您可以使用Velocity Tools中的一些。您可以添加自己的工具,例如可以运行查询的SQL工具。或者您可以使用higher level framework that uses velocity,它已经提供了模板中提供的丰富工具集。

因此,要回答您的问题,您可以执行所需的任何SQL语句,只要在上下文中添加可以执行此类语句的对象即可。您应该阅读有关如何在developer guide中正确使用Velocity的更多信息。

答案 2 :(得分:0)

以下内容适用于HQL(您可以尝试使用其他人作为示例)

一般示例,展示了如何显示给定查询的前5个结果:

#set($hql = "<query here>")
#set($results = $xwiki.searchDocuments($hql, 5, 0))
#foreach ($item in $results)
 * $item
#end

下面的示例将向您展示可以编写的各种HQL查询。 简单查询

显示用户XWiki.JohnDoe

创建的所有文档
#set($hql = "where doc.creator='XWiki.JohnDoe'")

添加个人信息

您可能需要查看此link