JDBC 和 JDBI 有什么区别?

2022-08-31 20:01:51

我想知道Java中JDBCJDBI之间的差异。特别是,哪一个通常更好,为什么?


答案 1

(我是jDBI的主要作者)

jDBI 是一个建立在 JDBC 之上的便利库。JDBC运行良好,但通常似乎针对数据库供应商(驱动程序编写者)而不是用户进行了优化。jDBI 尝试公开相同的功能,但在针对用户优化的 API 中。

它比HibernateJPA之类的东西要低得多。最接近的类似库可能是MyBatisiBATIS的分叉继承者)。

jDBI 支持两种样式 API,一种较旧的流利样式,如下所示:

List<Something> r = h.createQuery("select * from something where name = :name and id = :id")
                .bind(0, "eric")
                .bind("id", 1)
                .map(Something.class)
                .list();

较新的SQL对象API可以做更多反射类型的东西,并且确实开始抽象出一堆JDBC的东西:

interface TheBasics
{
    @SqlUpdate("insert into something (id, name) values (:id, :name)")
    int insert(@BindBean Something something);

    @SqlQuery("select id, name from something where id = :id")
    Something findById(@Bind("id") long id);
}

@Test
public void useTheBasics() throws Exception
{
    TheBasics dao = dbi.onDemand(TheBasics.class);

    dao.insert(new Something(7, "Martin"));

    Something martin = dao.findById(7);
}

该库具有良好的参考文档(javadoc)和一些合理的教程样式文档,http://jdbi.org/。它自2004年以来一直存在,并且被相对较少的人(我个人认识的几十个人,也许有十几家公司)使用,但它对他们来说非常有效。大多数从事这项工作的人都是A +人,他们主要关心的是构建一个适合他们的工具 - 它是开源的,这在很大程度上是一个副作用。


答案 2

JDBC 是 Java 中用于访问 SQL 数据库的一个长期建立的标准。数据库供应商实现 JDBC 驱动程序,以便可以统一的方式访问所有数据库。实际上,在Java中对数据库所做的一切都使用JDBC。

JDBI似乎是JDBC之上的某种抽象层,但由于它的文档记录很差,所以很难说。它当然没有被广泛使用,这是我第一次听说它。


推荐