Fluent JDBC Decorator

The following text is a partial translation of the original English article, performed by ChatGPT (gpt-3.5-turbo) and this Jekyll plugin:

这是如何使用jcabi-jdbc从SQL表中获取文本的方法:

String name = new JdbcSession(source)
  .sql("SELECT name FROM employee WHERE id = ?")
  .set(1234)
  .select(new SingleOutcome<String>(String.class));

简单而直接,不是吗?这个库通过JDBC简化了与关系数据库的交互,避免了使用ORM的需要。

jcabi-jdbcJDBC 的一个轻量级包装器。当您不需要完整的 ORM(如 Hibernate),只想在关系数据库中选择、插入或更新几行数据时,它非常方便使用。

每个JdbcSession实例都是数据库中的一个”事务”。您可以通过实例化这个类并传入一个参数(数据源)来启动它。

您可以从连接池获取数据源。有许多连接池的实现。我建议您使用BoneCP。以下是连接到PostgreSQL的示例:

@Cacheable(forever = true)
private static DataSource source() {
  BoneCPDataSource src = new BoneCPDataSource();
  src.setDriverClass("org.postgresql.Driver");
  src.setJdbcUrl("jdbc:postgresql://localhost/db_name");
  src.setUser("jeff");
  src.setPassword("secret");
  return src;
}

请务必注意@Cacheable注解。本文解释了它如何帮助您在一段时间内缓存Java方法的结果。将forever属性设置为true意味着我们不希望该方法被调用多次。相反,我们希望连接池只创建一次,并且每次第二次调用都应返回其现有实例(类似于单例模式)。

jcabi-jdbc 网站解释了如何执行插入更新或删除行的操作。您还可以执行任意的 SQL 语句

默认情况下,JdbcSession 在第一次选择/更新/插入操作后立即关闭 JDBC 连接。简而言之,它主要设计用于单一原子事务。然而,也可以选择保持连接开启并继续操作,例如:

new JdbcSession(source)
  .autocommit(false)
  .sql("START TRANSACTION")
  .update()
  .sql("DELETE FROM employee WHERE name = ?")
  .set("Jeff Lebowski")
  .update()
  .sql("INSERT INTO employee VALUES (?)")
  .set("Walter Sobchak")
  .insert(Outcome.VOID)
  .commit();

在这个例子中,我们逐个执行三个SQL语句,直到调用commit()之前保持连接(和事务)处于打开状态。

Translated by ChatGPT gpt-3.5-turbo/35 on 2023-09-20 at 21:58

sixnines availability badge   GitHub stars