class Publication {
String title
String author
Date datePublished
Integer numberOfPages
static namedQueries = {
recentPublications {
def now = new Date()
gt 'datePublished', now - 365
}
oldPublicationsLargerThan { pageCount ->
def now = new Date()
lt 'datePublished', now - 365
gt 'numberOfPages', pageCount
}
publicationsWithBookInTitle {
like 'title', '%Book%'
}
recentPublicationsWithBookInTitle {
// calls to other named queries...
recentPublications()
publicationsWithBookInTitle()
}
}
}
namedQueries
namedQueries 已弃用。改用 where 查询。
用途
namedQueries
静态属性定义命名查询。命名查询支持条件构建器语法。有关更多信息,请参见用户指南中 条件构建器 部分。
示例
// get all recent publications...
def recentPubs = Publication.recentPublications.list()
// get up to 10 recent publications, skip the first 5...
def recentPubs = Publication.recentPublications.list(max: 10, offset: 5)
// get a single recent publication
def recentPub = Publication.recentPublications.get()
// get the number of recent publications...
def numberOfRecentPubs = Publication.recentPublications.count()
// get a recent publication with a specific id...
def pub = Publication.recentPublications.get(42)
// get all recent publications where title = 'Some Title'
def pubs = Publication.recentPublications.findAllWhere(title: 'Some Title')
// get a recent publication where title = 'Some Title'
def pub = Publication.recentPublications.findWhere(title: 'Some Title')
// dynamic finders are supported
def pubs = Publication.recentPublications.findAllByTitle('Some Title')
// get all old publications with more than 350 pages
def pubs = Publication.oldPublicationsLargerThan(350).list()
// get all old publications with more than 350 pages
// and the word 'Grails' in the title
def pubs = Publication.oldPublicationsLargerThan(350).findAllByTitleLike('%Grails%')
// get all recent publications with 'Book' in their title
def pubs = Publication.recentPublicationsWithBookInTitle().list()
命名查询上的 list
方法支持与添加到域类的静态 list
方法(sort、order、ignoreCase、fetch 等)相同的属性。有关详细信息,请参阅 list 文档。
请注意,调用诸如 Publication.recentPublications.get(42) 的内容与调用诸如 Publication.get(42) 的内容不同。仅当 ID 为 42 的 Publication 符合 recentPublications 命名查询中定义的所有条件时,前者才会返回一个 Publication 。 |
命名条件支持 listDistinct()
class PlantCategory {
Set plants
String name
static hasMany = [plants: Plant]
static namedQueries = {
withPlantsInPatch {
plants {
eq 'goesInPatch', true
}
}
}
}
class Plant {
boolean goesInPatch
String name
}
PlantCategory.withPlantsInPatch.listDistinct()
命名条件支持在调用时以条件闭包形式提供其他条件
// get all recent publications with author names beginning with Tony or Phil...
def books = Publication.recentPublications {
or {
like 'author', 'Tony%'
like 'author', 'Phil%'
}
}
// get the number of recent publications with
// author names beginning with Tony or Phil...
def numberOfBooks = Publication.recentPublications.count {
or {
like 'author', 'Tony%'
like 'author', 'Phil%'
}
}
命名条件可以链接在一起。当条件链接在一起时,查询将生成,就好像所有链接的条件都已合并到一个条件闭包中。
// recent publications with 'Book' in the title
def books = Publication.recentPublications.publicationsWithBookInTitle.list()
// old publications with more than 500 pages and with 'Book' in the title
def books = Publication.oldPublicationsLargerThan(500)
.publicationsWithBookInTitle
.list()
当命名查询包含域类关系,并且关系类定义命名查询时,可以直接以方法调用的形式访问该命名查询。举例说明
class Author {
static hasMany = [publications: Publication]
static namedQueries = {
authorsWithRecentPublications {
publications {
// invoking a named query defined in the Publication class...
recentPublications()
}
}
}
}
class Publication {
Author author
static namedQueries = {
recentPublications {
def now = new Date()
gt 'datePublished', now - 10
}
}
}