Jdbi3官方教程(一) 簡介
Jdbi3官方教程(二) 入門
Jdbi3官方教程(三) Jdbi和Handle
Jdbi3官方教程(四) 參數(shù)綁定
Jdbi3官方教程(五) 查詢Query
Jdbi3官方教程(六) 映射器Mapper
查詢
查詢是一個(gè)承載結(jié)果的SQL語句,用以返回?cái)?shù)據(jù)庫的結(jié)果集。
List<Map<String, Object>> users =
handle.createQuery("SELECT id, name FROM user ORDER BY id ASC")
.mapToMap()
.list();
assertThat(users).containsExactly(
map("id", 1, "name", "Alice"),
map("id", 2, "name", "Bob"));
- mapToMap
對于單行另玖,您可以使用findOnly()
照宝,它只需要一行(或拋出異常):
String name = handle.select("select name from users where id = ?", 3)
.mapTo(String.class)
.findOnly();
- Handle的select語句拓型,同execute把鉴,可帶參數(shù)
您還可以使用findFirst()
,它返回Optional
映射類型的一個(gè):
Optional<String> name = handle.createUpdate("select name from users where id = :id")
.bind("id", 3)
.mapTo(String.class)
.findFirst();
可以在列表中返回多個(gè)結(jié)果行:
List<String> name = handle.createQuery(
"select title from films where genre = :genre order by title")
.bind("genre", "Action")
.mapTo(String.class)
.list();
對于其他collections遥诉,使用Collectors
:
Set<String> name = handle.createQuery(
"select title from films where genre = :genre order by title")
.bind("genre", "Action")
.mapTo(String.class)
.collect(Collectors.toSet());
您還可以把結(jié)果轉(zhuǎn)化成流:
handle.createQuery(
"select title from films where genre = :genre order by title")
.mapTo(String.class)
.useStream(stream -> {
// do stuff with stream
});
到目前為止须床,所有示例都顯示了String
結(jié)果類型铐料。當(dāng)然,您可以映射到許多其他數(shù)據(jù)類型:
LocalDate releaseDate = handle.createQuery(
"select release_date from films where name = :name")
.bind("name", "Star Wars: A New Hope")
.mapTo(LocalDate.class)
.findOnly();