跳到主要内容

2.5 属性过滤器

Jimmer支持属性级别过滤器,为关联对象 (而非主查询语句所针对的当前对象) 设置where过滤条件和orderBy排序。

查询动态实体

BookTable table = Tables.BOOK_TABLE;
List<Book> books = sqlClient
.createQuery(table)
.where(table.name().eq("GraphQL in Action"))
.select(
table.fetch(
Fetchers.BOOK_FETCHER
.allScalarFields()
.authors(
Fetchers.AUTHOR_FETCHER
.allScalarFields(),
cfg -> cfg.filter(args -> {
AuthorTable author = args.getTable();
args.where(
Predicate.or(
author.firstName().ilike("a"),
author.lastName().ilike("a")
)
);
args.orderBy(
author.firstName(),
author.lastName()
);
})
)
)
)
.execute();

对于每一个返回的Book对象而言,其关联集合Book.authors都有可能不包含数据库所有关联对象,因为该关联集合被施加了属性级过滤。

查询静态DTO

src/main/dto文件夹下新建任何一个扩展名为dto的文件,编辑代码如下

Book.dto
export com.yourcompany.yourproject.model.Book 
-> package com.yourcompany.yourproject.model.dto

BookDetailView {

#allScalars

!where(firstName ilike '%a%' or lastName ilike '%a%')
!orderBy(firstName asc, lastName asc)
authors {
#allScalars
}
}

编译,自动生成Java/Kotlin类型BookDetailView

BookTable table = Tables.BOOK_TABLE;
List<BookDetailView> books = sqlClient
.createQuery(table)
.where(table.name().eq("GraphQL in Action"))
.select(
table.fetch(BookDetailView.class)
)
.execute();

对于每一个返回的Book对象而言,其关联集合Book.authors都有可能不包含数据库所有关联对象,因为该关联集合被施加了属性级过滤。