JDBI:便捷的JDBC抽象
JDBI是一个使用方便的SQL开发库,用符合Java语言习惯的集合、Bean等方式,提供关系数据库访问接口,同时保留了JDBC类似的信息。JDBI提供了链式风和SQL对象两种风格的API。
主要功能
链式API
链式风格看起来像下面这样:
// using in-memory H2 database
DataSource ds = JdbcConnectionPool.create(“jdbc:h2:mem:test”,
“username”,
“password”);
DBI dbi = new DBI(ds);
Handle h = dbi.open();
h.execute(“create table something (id int primary key, name varchar(100))”);
h.execute(“insert into something (id, name) values (?, ?)”, 1, “Brian”);
String name = h.createQuery(“select name from something where id = :id”)
.bind(“id”, 1)
.map(StringMapper.FIRST)
.first();
assertThat(name, equalTo(“Brian”));
h.close();
SQL对象风格API
第二种SQL对象风格API,简化了创建DAO对象的通常做法,可以将方面对应为一条语句。通过注解为SQL对象提供定义,例如:
public interface MyDAO
{
@SqlUpdate(“create table something (id int primary key, name varchar(100))”)
void createSomethingTable();
@SqlUpdate(“insert into something (id, name) values (:id, :name)”)
void insert(@Bind(“id”) int id, @Bind(“name”) String name);
@SqlQuery(“select name from something where id = :id”)
String findNameById(@Bind(“id”) int id);
/**
* close with no args is used to close the connection
*/
void close();
}
上面的接口定义了两个update操作,第一条语句创建了数据表,与链式API示例效果一样;第二条语句做了同样的insert操作;第三条语句定了一个查询。在第二条语句中可以看到,调用方法的时候传入了两个参数,通过名字进行绑定(bind)。
最后一个close()方法非常特别,执行close方法会关闭底层的JDNC连接。方法调用可能会抛出异常,像close()这样的方法要求在java.io.Closeable对象上调用,这样可以利用Java 7中资源自动关闭特性。
使用SQL对象定义,可以像下面这样编写代码:
// using in-memory H2 database via a pooled DataSource
JdbcConnectionPool ds = JdbcConnectionPool.create(“jdbc:h2:mem:test2”,
“username”,
“password”);
DBI dbi = new DBI(ds);
MyDAO dao = dbi.open(MyDAO.class);
dao.createSomethingTable();
dao.insert(2, “Aaron”);
String name = dao.findNameById(2);
assertThat(name, equalTo(“Aaron”));
dao.close();
ds.dispose();
下载
Maven
在通过Apache Maven管理的项目中使用JDBI,可以添加以下依赖:
org.jdbi
jdbi
jdbi.version123org.jdbijdbi
{jdbi.version}
在Maven Central可以找到JDBI的最新版本。
下载Jar
JDBI发布的jar文件可以从Maven Central下载。
开发资源
官方文档
5分钟入门介绍
下载JDBI
DBI、Handles与SQL语句
链式查询
SQL对象API概述
SQL对象查询
操作SQL对象数据
SQL对象批处理
SQL对象参数绑定
SQL对象混合(mixin)
自定义SQL对象
FAQ
Maven站点
Javadoc
官方文档站点
Google讨论组
JavaDoc
FAQ
社区
使用协议
JDBI遵循Apache License 2.0开源协议发布。