JDBI是一个使用方便的SQL开发库,用符合Java语言习惯的集合、Bean等方式,提供关系数据库访问接口,同时保留了JDBC类似的信息。JDBI提供了链式和SQL两种风格的API。
jdbi的网址是: http://jdbi.org/jdbi2/
maven依赖,可以在https://mvnrepository.com/ 中查到
<dependency>
<groupId>org.jdbi</groupId>
<artifactId>jdbi</artifactId>
<version>${jdbi.version}</version>
</dependency>
官网上链式风格的例子:
// 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(StringColumnMapper.INSTANCE)
.first(); assertThat(name, equalTo("Brian")); h.close();
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();
}
更为复杂的应用,Bean映射:
public class Something
{
private int id;
private String name;
private ValueType value; public Something() { } public Something(int id, String name, ValueType value)
{
this.id = id;
this.name = name;
this.value = value;
} public int getId()
{
return id;
} public void setId(int id)
{
this.id = id;
} public String getName()
{
return name;
} public void setName(String name)
{
this.name = name;
} public ValueType getValue()
{
return value;
} public void setValue(ValueType value)
{
this.value = value;
}
} public class SomethingMapper implements ResultSetMapper<Something>
{
public Something map(int index, ResultSet r, StatementContext ctx) throws SQLException
{
return new Something(r.getInt("id"), r.getString("name"), ValueType.valueOf(r.getString("value"));
}
}
@RegisterMapper(SomethingMapper.class)
public interface AnotherQuery
{
@SqlQuery("select id, name, value from something where id = :id")
Something findById(@Bind("id") int id);
}
dropwizard中默认提供了对jdbi的支持,可以参考https://www.dropwizard.io/0.7.1/docs/manual/jdbi.html