The following text is a partial translation of the original English article, performed by ChatGPT (gpt-3.5-turbo) and this Jekyll plugin:
Вот как вы получаете текст из таблицы SQL с помощью jcabi-jdbc:
String name = new JdbcSession(source)
.sql("SELECT name FROM employee WHERE id = ?")
.set(1234)
.select(new SingleOutcome<String>(String.class));
Просто и прямолинейно, не так ли? Библиотека упрощает взаимодействие с реляционными базами данных через JDBC, избегая необходимости использования ORM.
jcabi-jdbc - это легковесная оболочка для JDBC. Она очень удобна в использовании, когда вам не нужна полноценная 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
означает, что мы не хотим вызывать этот метод более одного раза. Вместо этого мы хотим, чтобы пул соединений был создан только один раз, и каждый второй вызов должен возвращать его существующий экземпляр (похоже на шаблон Singleton).
Веб-сайт jcabi-jdbc объясняет, как вы можете вставить, обновить или удалить строку. Вы также можете выполнить любое SQL-выражение.
По умолчанию JdbcSession
закрывает JDBC-соединение сразу после первой операции select/update/insert. Проще говоря, он предназначен в основном для использования в одиночных атомарных транзакциях. Однако, есть возможность оставить соединение открытым и продолжить, например:
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