【问题标题】:grails findAll taggrails findAll 标签
【发布时间】:2010-06-30 12:11:01
【问题描述】:

如何在 grails findAll 标签中使用“SELECT id, name, part, description FROM user”。

我试过了

 User.findAll("SELECT id, name, part, description FROM user") 

改为使用

User.findAll("FROM user")

但显示错误。
标签是什么?

【问题讨论】:

    标签: grails findall


    【解决方案1】:

    finadAll() 返回域对象的集合,因此枚举列选择没有意义;它理解的查询不是真正的 SQL,基本上只包含 WHERE 子句。由于您似乎不想限制结果集,这可能就是您所需要的:

    User.findAll()
    

    它将返回所有User 对象的集合。如果你需要约束,语法是这样的

    User.findAll("from User as u where u.id=?", [userId])
    

    或者,更简单,你可以使用a dynamic finder

    User.findAllById(userId);
    

    【讨论】:

    • 但是我们是否有任何标签显示“SELECT id, name, part, description FROM user”。谢谢
    • @Srinath:不,没有那样的东西。对于与域对象一起工作的框架来说,这是没有意义的。使用我列出的方法获取用户对象然后访问这些对象的属性有什么问题?听起来您以前只使用过 PHP,现在正尝试在 Grails 中编写 PHP 代码。这不会让你走得太远。
    • 以前我在 Ruby on Rails 工作过。我已经使用了你上面提到的标签 findAll。我只是想知道 Grails 中是否也有类似的标签。谢谢你的建议:(
    • @Srinath:您可以使用 groovy.sql.Sql 进行直接 SQL 查询,但这样做会离开 Grails 框架。顺便说一句,你一直在说“标签”,但我们在这里谈论的是方法,而不是标签。
    • 是的。我在以前的应用程序中使用了 groovy.sql.Sql,它会以数组形式返回结果。但是对于这个应用程序,我使用了 findAll 。如果 grails 中有任何其他方法,我发布了一些信息,以了解和分享你们的一些信息。谢谢
    【解决方案2】:

    如果您想像这样运行报表样式的查询,请使用 executeQuery 方法:

    def rows = User.executeQuery("SELECT id, name, part, description FROM User")
    

    返回值将是 Object[] 的列表,其中对象数组中的每个元素都是列的类型,即第一个元素是 long,第二个元素是 String,等等。

    请注意,由于您指的是 Hibernate 实体,因此 User 必须大写 - 这不是 SQL 查询,而是 HQL。

    【讨论】:

      【解决方案3】:

      如果您只想查询某些字段,可以使用带有投影的条件查询。

      例子:

      def userProperties = User.withCriteria {
          projections {
              property('id')
              property('name')
              property('part')
              property('description')
          }
      }
      

      此查询将为每个匹配的行返回一个字符串数组(或数据库列类型映射到的任何内容),而不是域对象。

      【讨论】:

        【解决方案4】:

        它将返回一个对象的 ArrayList,您只需访问该对象的值。例如:

        def result = Code.findAll("from Code as c where c.user_code=?",[pass])
        result[0].user_code
        

        我的代码类是这样的:

        class Code {
        
            String user_code
            boolean flg_active
            
            static constraints = {
                
                user_code nullable:true, blank:true, size:0..Text.MID
                flg_active nullable:true, blank:true, default:1
            }
        }
        

        【讨论】:

          猜你喜欢
          • 2011-08-08
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2018-01-17
          • 2020-12-02
          • 2014-01-06
          • 1970-01-01
          相关资源
          最近更新 更多