【问题标题】:Defining database queries inside Velocity templates在 Velocity 模板中定义数据库查询
【发布时间】:2013-01-19 02:04:54
【问题描述】:

我正在寻找可以在我的项目中用作模板引擎的各种库,现在 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.

如果您能对此有所了解,将不胜感激。有好心人提供一个例子,或者指向我可以找到更多文档的位置吗?

【问题讨论】:

    标签: java velocity


    【解决方案1】:

    我会推荐 http://velosurf.sourceforge.net/ 之类的东西,而不是直接嵌入查询。

    【讨论】:

      【解决方案2】:

      Velocity 是一个非常轻量级的模板引擎,它本身的功能很少。它通过 interpolating 变量在上下文中定义(由您)到模板文件中工作。默认情况下,上下文为 empty,这意味着模板没有可使用的变量。 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 的更多信息。

      【讨论】:

        【解决方案3】:

        以下是针对 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

        【讨论】:

        • 感谢您的回答。知道我是否可以在这里执行 SQL 查询吗?如果可能,我应该在哪里配置数据库凭据和连接器信息?我知道我可以使用 DataSourceResourceLoader 从数据库中获取模板。但是是否可以在模板中执行 SQL 查询并获取值?提前致谢。
        • 这与 XWiki 相关联,独立的 Velocity 默认没有 $xwiki 对象。
        猜你喜欢
        • 2019-02-20
        • 2017-01-24
        • 1970-01-01
        • 2016-07-23
        • 1970-01-01
        • 1970-01-01
        • 2011-10-18
        • 2017-03-31
        • 2021-10-04
        相关资源
        最近更新 更多