查询执行器

Baki#query(sql) 返回 QueryExecutor,负责绑定参数并选择结果类型。

绑定参数

baki.query("select * from test.user where id = :id and name = :name")
    .arg("id", 10)
    .arg("name", "cyx")
    .rows();

也可以一次性覆盖参数:

baki.query("...")
    .args(Args.of("id", 10, "name", "cyx"))
    .rows();

baki.query("...")
    .args("id", 10, "name", "cyx")
    .rows();

返回类型

stream

返回惰性 Stream<DataRow>,适合二次处理,使用后必须关闭:

try (Stream<DataRow> stream = baki.query("...").stream()) {
    stream.map(...).forEach(...);
}

maps

返回 List<Map<String, Object>>:

List<Map<String, Object>> maps = baki.query("...").maps();

rows

返回 List<DataRow>:

List<DataRow> rows = baki.query("...").rows();

entities

返回实体集合,需要配置 entityMetaProvider:

List<Guest> guests = baki.query("...").entities(Guest.class);

findFirst

返回 Optional<DataRow>:

Optional<DataRow> first = baki.query("...").findFirst();

findFirstRow

返回第一条 DataRow,不会为 null:

DataRow row = baki.query("...").findFirstRow();

findFirstEntity

返回第一条实体,可能为 null:

Guest guest = baki.query("...").findFirstEntity(Guest.class);

pageable

转成分页查询:

PagedResource<DataRow> page = baki.query("...")
    .pageable(1, 20)
    .collect();

详细分页配置见 分页查询。