spring-jdbc vs spring-data-jdbc и что они поддерживают

Мне любопытно, в чем разница между spring-jdbc (что мне не хватает в новейшем весеннем выпуске) и spring-data-jdbc.
Есть ли разница или просто переименование (в репозиториях я не вижу это)?

И где-то описано, каковы поддерживаемые цели (спецификации DB / JDBC / JDK) версий?

например для простого JDBC от oracle я вижу эту информацию здесь: http://www.oracle.com/technetwork/database/enterprise-edition/jdbc-faq-090281.html#01_03_1
(например: JDBC Spec 4.1 в ojdbc7.jar на Java7 / Java8 в Oracle DB 12.1 / 12cR1)

Но я скучаю по spring-jdbc - где мне найти эту информацию?


person PaulEdison    schedule 20.08.2018    source источник


Ответы (1)


spring-jdbc

Документы для spring-jdbc в основном находятся здесь:

https://docs.spring.io/spring/docs/current/spring-framework-reference/data-access.html.

Хотя это не указывает конкретно на проект Spring spring-jdbc. Этот проект просто предоставляет все абстракции Spring поверх простого JDBC DataSource, которые вы можете использовать с Spring Framework. Например, Spring DataSources < / a>, которые прекрасно подключаются к возможностям Spring по управлению транзакциями, например аннотации @Transactional. Кроме того, JdbcTemplate является частью этого модуля, который позволяет вам выполнять операторы SQL и извлекать объекты из ResultSet, не имея дело с обработкой исключений или неприятными деталями правильного закрытия операторов, соединений и тому подобного.

spring-data-jdbc

spring-data-jdbc, с другой стороны, предоставляет абстракцию Spring Data поверх spring-jdbc. То есть вы можете создать Spring Data CrudRepository и простой объект (не объект JPA!), И, как это делает Spring Data, он будет создавать ваши запросы для вас без необходимости писать собственные запросы CRUD через JDBC, как в этом примере в репозитории spring-data-examples git.

Используя указанный пример в качестве демонстрации:

interface CategoryRepository extends CrudRepository<Category, Long> {}

Приведенный выше код - это все, что вам может понадобиться (с использованием интроспекции имени объекта Category в качестве источника имени таблицы (на основе NamingStrategy) и его свойств в виде столбцов, снова аналогично JPA, но без использования JPA .

Вместо того, чтобы писать так:

@Repository
public class CategoryRepository {
   public void create(Category category) {
      jdbcTemplate.execute("insert...");
   }

  // The rest of my other CRUD operations
}
person Dovmo    schedule 20.08.2018
comment
Может быть, вы можете проиллюстрировать это примером? Может быть, быстрая реализация CrudRepo по сравнению с традиционным подходом. - person Colton; 20.08.2018
comment
Отредактировано. Это должно немного лучше объяснить, что делает этот пример. - person Dovmo; 20.08.2018
comment
Хорошее объяснение - но все же мне не хватает того, какая версия фреймворков поддерживает спецификацию JDBC. Я пролетел над документом, но ничего не нашел по этому поводу. - person PaulEdison; 21.08.2018
comment
docs.spring. io / spring / docs / current / spring-framework-reference / В первом абзаце сказано All approaches require a JDBC 2.0-compliant driver, and some advanced features require a JDBC 3.0 driver. - person Dovmo; 21.08.2018
comment
Чтобы понять это - spring-jdbc требуется настоящий драйвер JDBC ...? Но у меня есть проект с использованием spring-jdbc, но я не могу найти какую-либо зависимость драйвера JDBC от него (с использованием mvn dependency:tree -Dverbose), как я ожидал, прочитав этот абзац из документа - person PaulEdison; 21.08.2018
comment
spring-jdbc - удобная абстракция Spring над JDBC. Идея состоит в том, что вы можете использовать любую базу данных и любой JDBC-совместимый драйвер, который вы хотите для этой базы данных, обернуть этот ресурс в Spring DataSource и позволить Spring позаботиться об управлении транзакциями за вас и т. Д. - person Dovmo; 21.08.2018
comment
@Dovmo: Но как он может абстрагироваться, если он не является частью окончательного дерева зависимостей, что он абстрагирует, если нет ничего. - person PaulEdison; 20.09.2018
comment
@PaulEdison JDBC является частью Java SE, поэтому для этого не требуется явной зависимости. Вам необходимо добавить реализацию драйвера JDBC, которую вы действительно хотите использовать. - person Jens Schauder; 09.01.2019
comment
@JensSchauder: Но если бы я не знал, что он использует, как я уже сказал, его нет ... - person PaulEdison; 10.01.2019
comment
@PaulEdison где-то есть драйвер Jdbc. Без него не пойдет. Может быть, вы незаметно используете Java DB? netbeans.org/kb/docs/ide/java-db.html - person Jens Schauder; 10.01.2019
comment
@JensSchauder: он должен быть где-то, но я его не вижу ... как я могу определить, где он скрыт, используя mvn dependency: tree -Dverbose, похоже, не работает? - person PaulEdison; 04.02.2019
comment
@PaulEdison, если вы запускаете свое приложение с java -verbose:class, а не только с java, оно будет перечислять все загруженные классы, включая место, откуда оно было загружено. Если вы найдете это для jdbc или драйвера, вы сможете его найти. - person Jens Schauder; 04.02.2019
comment
@PaulEdison Конкретный драйвер БД должен быть где-то в пути к классу: 1. в jar (определенном, например, в maven) 2. на сервере приложений (папка jars) 3. добавлен вручную (зарегистрирован / добавлен в путь к классам и т. Д.). Если вы попытаетесь подключить свое приложение к другой БД, это не удастся (например, Oracle vs. Haidi vs. драйверы H2). Вы можете настроить новый чистый проект с нуля и попробовать работать только с java JDBC - вам нужно будет добавить конкретный драйвер БД в путь к классу. Поскольку вам нужно будет написать много шаблонного кода, у вас есть два варианта: либо написать утилиты самостоятельно, либо вы можете использовать Spring JDBC. - person sasynkamil; 20.03.2021