跳到主要内容

8. 其他查询

标准子查询

BookTable book = BookTable.$;

List<Book> newestBooks = sqlClient
.createQuery(book)
.where(
Expression.tuple(
book.name(),
book.edition()
).in(sqlClient
.createSubQuery(book)
.groupBy(book.name())
.select(
book.name(),
book.edition().max()
)
)
)
.select(book)
.execute();

Native SQL

为了支持特有数据库产品特有的能力,Jimmer的SQL DSL支持嵌入Native SQL表达式。以正则表达式查询为例。

AuthorTable table = Tables.AUTHOR_TABLE;

List<Author> authors = sqlClient
.createQuery(table)
.where(
Predicate.sql(
"regexp_like(%e, %v)",
it -> it
.expression(table.firstName())
.value("^Ste(v|ph)en$")
)
)
.select(table)
.execute();
  • Native SQL片段中的%e表示可以嵌入一个强类型的Jimmer DSL表达式。

    Lambda中的expression(...)指定用于替换%e的表达式。

  • Native SQL片段中的%v表示可以嵌入一个字面量。

    Lambda中的value(...)指定用于替换%v的字面量。