grails中find()和findWhere之间的区别
发布时间:2020-12-14 16:21:12 所属栏目:大数据 来源:网络整理
导读:我用find代替: find("from domain d where d.id=? AND d.name=?",[params.id,params.name]) 这给了我第一个匹配的结果. 现在我看到有findWhere()用于: Book.findWhere(author: params.author,title: params.title) 还返回第一个匹配的结果集. 什么是基本区
我用find代替:
find("from domain d where d.id=? AND d.name=?",[params.id,params.name]) 这给了我第一个匹配的结果. Book.findWhere(author: params.author,title: params.title) 还返回第一个匹配的结果集. 先感谢您. 解决方法
是的,所以我创建了一个测试应用程序,创建了一个测试Domain类:
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 = { } } 还有一个测试控制器: 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种控制器方法. 找到执行: 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_.title as title0_0_ from book this_ where this_.author=? and this_.title=? limit ? 正如您所看到的,在这个简单的例子中,他们只是说出同样事情的3种方式 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |