Jdbi3官方教程(三)|Jdbi3官方教程(三) Jdbi和Handle
Jdbi3官方教程(一) 简介
Jdbi3官方教程(二) 入门
Jdbi3官方教程(三) Jdbi和Handle
Jdbi3官方教程(四) 参数绑定
Jdbi3官方教程(五) 查询Query
Jdbi3官方教程(六) 映射器Mapper
3.1 Jdbi
Jdbi类是使用库的主入口点。
每个Jdbi
实例都包装一个JDBC DataSource。它也是数据库会话的配置存储库。
有几种方法可以创建Jdbi
实例。您可以使用JDBC URL:
// H2 in-memory database
Jdbi jdbi = Jdbi.create("jdbc:h2:mem:test");
如果您有
DataSource
对象,可以直接使用它:DataSource ds = ...
Jdbi jdbi = Jdbi.create(ds);
Jdbi
实例是线程安全的,不拥有任何数据库资源。通常,应用程序创建单个共享
Jdbi
实例,并在那里设置任何通用配置。在更有限的场景(例如HTTP请求或事件回调)中,您将从
Jdbi
实例请求一个Handle
对象。3.2 Handle
Handle表示一个激活的 数据库连接。
Handle用于为数据库准备和运行SQL语句,以及管理数据库事务。它提供对fluent语句API的访问,这些API可以绑定参数,执行语句,然后将任何结果映射到Java对象。
Handle
从Jdbi
创建时会继承配置。由于有几种方法可以在运行时获取Handle
会持有一个打开的数据库连接,因此必须注意确保每个Handle在完成后都关闭。无法关闭的Handles将最终因为连接过多淹没您的数据库,或者耗尽您的连接池。
Handle
实例。如果您的操作将返回一些结果,请使用 jdbi.withHandle():
List names = jdbi.withHandle(handle ->
handle.createQuery("select name from contacts")
.mapTo(String.class)
.list());
assertThat(names).contains("Alice", "Bob");
如果您的操作不需要返回结果,请使用
Jdbi.useHandle(HandleConsumer)
:jdbi.useHandle(handle -> {
handle.execute("create table contacts (id int primary key, name varchar(100))");
handle.execute("insert into contacts (id, name) values (?, ?)", 1, "Alice");
handle.execute("insert into contacts (id, name) values (?, ?)", 2, "Bob");
});
withHandle
和useHandle
都会打开一个临时的Handle,调用你的回调函数,并在回调函数返回的时候立即释放Handle。在Jdbi的一些地方你可能会注意到“消费者”与“回调”的命名模式。回调返回一个值,并与或者,如果您想自己管理Handle的生命周期,请使用with-
方法结合。消费者不会返回值,而是与use-
方法相结合。
jdbi.open()
:try (Handle handle = jdbi.open()) {
handle.execute("insert into contacts (id, name) values (?, ?)", 3, "Chuck");
}
【Jdbi3官方教程(三)|Jdbi3官方教程(三) Jdbi和Handle】使用时jdbi.open()
,应始终使用try-with-resources或try-finally块来确保释放数据库连接。未能释放Handle会导致连接泄漏。我们建议您在有可能的情况下尽量使用withHandle
或useHandle
而不是open
。
- Jdbi3官方教程(一) 简介
- Jdbi3官方教程(二) 入门
- Jdbi3官方教程(三) Jdbi和Handle
- Jdbi3官方教程(四) 参数绑定
- Jdbi3官方教程(五) 查询Query
- Jdbi3官方教程(六)映射器Mapper
- Jdbi3官方教程(七)结果Result
推荐阅读
- 2.6|2.6 Photoshop操作步骤的撤消和重做 [Ps教程]
- 漫画初学者如何学习漫画背景的透视画法(这篇教程请收藏好了!)
- ts泛型使用举例
- 星际无限|星际无限 | 官方推出Filecoin MinerX奖学金计划,吸引中小型Filecoin矿工
- 用npm发布一个包的教程并编写一个vue的插件发布
- 1040表格和W-2表格
- 20180322【w4复盘日志】
- 狗狗定点大小便视频教程下载地址
- SwiftUI|SwiftUI iOS 瀑布流组件之仿CollectionView不规则图文混合(教程含源码)
- 【实用教程】4种获取无水印视频素材的方法