Grails中withCriteria和CreateCriteria有什么区别?

时间:2013-05-24 06:51:25

标签: grails

它们的区别是什么以及我们需要使用它们的原因和地点,我认为它们对我来说似乎没什么区别?

5 个答案:

答案 0 :(得分:9)

withCriteria { ... }基本上是createCriteria().list { ... }的简写。如果您需要使用任何其他标准方法(get,count,...)或将分页参数传递给list,那么您必须使用长手形式。

SomeDomain.createCriteria().list(max:10, offset:50) {
  // ...
}

答案 1 :(得分:7)

值得添加我在createCriteria()的grails文档中遇到的内容。

  

因为该查询包含分页参数(max和offset),所以这将返回一个PagedResultList,它具有getTotalCount()方法以返回分页的匹配记录总数。仍然运行两个查询,但它们是为您运行的,结果和总计数在PagedResultList中合并。

Source

这意味着您可以使用getTotalCount()而无需发起呼叫(它是为您制作的)。这非常有帮助。示例文档显示:

def c = Account.createCriteria()
def results = c.list (max: 10, offset: 10) {
    like("holderFirstName", "Fred%")
    and {
        between("balance", 500, 1000)
        eq("branch", "London")
    }
    order("holderLastName", "desc")
}
println "Rendering ${results.size()} Accounts of ${results.totalCount}"

使用withCriteria()时,此功能

答案 2 :(得分:5)

createCriteria() 的示例:

def criteria = OfferCredit.createCriteria {
    offer {
        eq('status', LeverageUtils.ACTIVE_STATUS)
        ge('expirationDate', new Date())
    }
    user {
        eq('userId', userId)
    }
    eq('status', LeverageUtils.ACTIVE_STATUS)
    order('creationDate', 'asc')
}

criteria.list()

withCriteria() 的示例:

List<Supermarket> results = Supermarket.withCriteria {
    like("sp_street", params.street)
    productSupermarket {
         product {
            idEq(params.product)
        }
        // or just eq('product', someProduct)
    }
    maxResults(10)
}

答案 3 :(得分:4)

withCriteria执行并返回列表。它提供了一个闭包,您可以使用该闭包在执行之前自定义条件。

createCriteria只创建一个可以修改的条件对象,然后显式调用list方法来执行。

如果标准很简单或者在一个地方定义,最好使用withCriteria。

如果你需要传递标准(在一个函数中创建并将其传递给其他人),createCriteria会更好。我认为对标准的支持是有限的。

答案 4 :(得分:2)

withCriteria - &gt;

目的 - &gt;允许内联执行Criteria查询。 如果未找到匹配的记录,则返回空列表。

如果指定了投影:

returns a single value if it only contains one field
a List in case there are multiple fields in the projection
相关问题