gpt4 book ai didi

grails - grails 中 find() 和 findWhere 的区别

转载 作者:行者123 更新时间:2023-12-01 07:38:38 25 4
gpt4 key购买 nike

我使用 find :

 find("from domain d where d.id=? AND d.name=?",[params.id, params.name])

这给了我第一个匹配结果。
现在我看到有 findWhere() 用于:
  Book.findWhere(author: params.author, title: params.title)

还返回第一个匹配结果集。
什么是基本区别以及何时使用。

先感谢您。

最佳答案

对,所以我创建了一个测试应用程序,创建了一个测试域类:

package test

class Book {
String title
String author

static constraints = {
}
}

在 Bootstrap 中添加了一些虚拟数据:
import test.*

class BootStrap {

def init = { servletContext ->
new Book( title:'Book 1', author:'Tim' ).save()
new Book( title:'Book 2', author:'Alice' ).save()
new Book( title:'Book 3', author:'Bob' ).save()
}
def destroy = {
}
}

和一个测试 Controller :
package test

import grails.converters.JSON

class BookController {
def test1() {
Book b = Book.find( "from Book as b where b.author = ? and b.title = ?", [ 'Tim', 'Book 1' ] )
render b as JSON
}
def test2() {
Book b = Book.findWhere( author:'Tim', title:'Book 1' )
render b as JSON
}
def test3() {
Book b = Book.findByAuthorAndTitle( 'Tim', 'Book 1' )
render b as JSON
}
}

然后,通过添加打开休眠日志记录
trace 'org.hibernate.type'
debug 'org.hibernate.SQL'

到 Config 的 log4j 部分,并且:
logSql = true

到 DataSource.groovy 的 dataSource 部分。

然后,运行所有 3 个 Controller 方法。
find 执行:
select book0_.id as id0_,
book0_.version as version0_,
book0_.author as author0_,
book0_.title as title0_
from book book0_
where book0_.author=? and book0_.title=? limit ?
findWhere 执行:
select this_.id as id0_0_,
this_.version as version0_0_,
this_.author as author0_0_,
this_.title as title0_0_
from book this_
where (this_.author=? and this_.title=?) limit ?
findByAuthorAndTitle 给了我们:
select this_.id as id0_0_,
this_.version as version0_0_,
this_.author as author0_0_,
this_.title as title0_0_
from book this_
where this_.author=? and this_.title=? limit ?

正如你所看到的,在这个简单的例子中,它们只是表达同一件事的 3 种方式

关于grails - grails 中 find() 和 findWhere 的区别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22484480/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com