Разница между Spring DAO, Spring ORM и Spring JDBC
Spring Framework — это среда приложений и инверсия контейнера управления для платформы Java. Основные функции платформы могут использоваться любым приложением Java, но существуют расширения для создания веб-приложений поверх платформы Java EE.
Весна-ДАО
Spring-DAO не является модулем Spring. Он не предоставляет интерфейсы или шаблоны для доступа к данным. Одно важное изменение, которое необходимо внести при использовании Spring DAO, заключается в том, что оно должно быть аннотировано с помощью @Repository . Причина этого заключается в том, что исключения, которые могут возникнуть в базовой технологии, такой как JDBC, Hibernate, JPA и т. д., последовательно транслируются в соответствующий подкласс DataAccessException. Давайте посмотрим на это на одном примере сценария обслуживания студентов.
Изначально Hibernate — это механизм персистентности, который прижился. Предположим, допустим, что HibernateException перехватывается на уровне службы. Должны быть шаги, чтобы поймать его. Но в какой-то момент вместо Hibernate поменяли на JPA, тогда не надо менять интерфейсы DAO.
Вместо этого, если он аннотирован @Repository, тогда исключения, связанные с текущими базовыми технологиями, будут напрямую преобразованы в spring DataAccessException. Из-за этой функции, несмотря на то, что базовые технологии изменены с спящего режима на JPA или с JPA на спящий режим, все равно будут выдаваться одни и те же Spring DataAccessExceptions. Согласно базовым технологиям, пружина будет транслироваться в соответствии с их собственными исключениями.
Ограничения в использовании Spring DAO, связанные с исключениями
- Не следует перехватывать исключения сохранения
- Иерархия исключений обычно богаче и содержательнее той, которую предоставляет Spring. Но нет сопоставления от одного провайдера к другому. Причина добавления @Repository в DAO заключается в том, что bean-компоненты автоматически добавляются процедурой сканирования. Spring имеет тенденцию добавлять в аннотацию другие полезные функции.
Пример фрагмента кода, относящегося к Spring DAO. Уровень реализации службы должен быть аннотирован с помощью @Repository, за которым следует соответствующий уровень службы.
Java
// Necessary imports @Repository ( "<Specify the DAO that is getting accessed" ) // Eg : StudentDAO public class StudentDAOImplementsation extends HibernateDao<Student, Long> implements StudentDAO { @Override public boolean remove(Student studentObject) { // Write necessary steps return true ; } } |
Весенний ОРМ
Spring-ORM — очень эффективный модуль, играющий роль зонтичного шаблона. Причина, по которой это называется зонтиком, заключается в том, что он охватывает многие технологии сохранения, а именно JPA, JDO, Hibernate и iBatis. Для каждой отдельной технологии Spring предоставляет классы интеграции. Благодаря этим классам интеграции каждая технология легко интегрируется с управлением транзакциями Spring. В основном внедрение DataSource выполняется через SessionFactory или EntityManagerFactory и т. д. bean-компонент. В случае чистого JDBC, кроме JdbcTemplate, нет необходимости в каком-либо классе интеграции, поскольку JDBC (подключение к базе данных Java) напрямую зависит от источников данных. Для каждой технологии конфигурация в основном состоит во внедрении bean-компонента DataSource в какой-либо вид. Для чистого JDBC нет необходимости в таких классах интеграции (кроме JdbcTemplate), поскольку JDBC полагается только на DataSource. Spring-JDBC не требуется в случае ORM, такого как JPA или Hibernate, но требуется Spring-Data. Spring-Data — это не что иное, как зонтичный проект, и он может предоставить общий API, который определяет доступ к DAO и аннотациям, и охватывает как источники данных SQL, так и NoSQL. Классы моделей должны быть аннотированы с помощью @Entity, а в этом первичном ключе должны быть аннотированы с помощью @Id. Пример кода для Student Model Class приведен ниже.
Java
// Necessary import statements // This is much required and here model class // should match with database table name @Entity public class Student { @Id private int studentId; // other necessary attributes like name, address etc., // Corresponding getter and setter methods } |
Spring ORM DAO и класс обслуживания должны быть аннотированы с помощью @Component
Java
// Necessary import statements @Component public class StudentDAO { @PersistenceContext private EntityManager em; // Rest set of code } |
Весна JDBC
Класс JdbcTemplate предоставляется Spring-JDBC. Это напрямую помогает проверить SQL-запросы и параметры. Не нужно беспокоиться о сантехническом коде, поскольку он этого не требует. Конфигурация с DataSource является обязательной. Пример кода приведен ниже.
Java
// necessary import statements int totalStudents = jdbcTemplate.queryForObject( "select count(1) from Student" , Integer. class ); Student student = jdbcTemplate.queryForObject( "select name, address from Student where id=?" , rs -> new Student(rs.getString( 1 ), rs.getString( 2 )), 12345 ); |
Преимущество использования Spring-JDBC заключается в том, что он предоставляет JdbcDaoSupport, что полезно для расширения DAO. Он имеет 2 свойства, а именно DataSource и JdbcTemplate. Они полезны для реализации методов DAO. Кроме того, доступен транслятор исключений, который переводит исключения SQL в Spring DataAccessExceptions.
Таблица различий
Весна ДАО | Весенний ОРМ | Весна JDBC |
---|---|---|
Обобщенная концепция и аннотация @Repository являются обязательными. | Простая интеграция с Spring со следующим
| Для простых вызовов JDBC. |
Реализация доступа к данным полностью отделена и, следовательно, не зависит от базы данных. | Внедрение нескольких технологий возможно за счет интеграции с необходимыми инструментами. | Если приложение не сложное и диверсифицированное и лежит на одной базе данных, мы можем это использовать и это эффективно. |
Необходимо указать дополнительный слой и его зависимости. Следовательно, запуск может занять некоторое время, если приложение сложное. | Необходимо указать дополнительный слой и его зависимости. Следовательно, запуск может занять некоторое время, если приложение сложное. | Поскольку это просто, никаких сложных зависимостей не требуется, но переносимость станет меньше, если мы будем использовать это. |
Проблемы с обслуживанием возникнут из-за сложности дополнительного слоя. | Проблемы с обслуживанием возникнут из-за сложности дополнительного слоя. | Здесь меньше обслуживания только. |
Шаблоны проектирования, такие как классы Factory и объект передачи данных (DTO), необходимы для реализации вместе с DAO. | Получил поддержку нескольких технологий, таких как Hibernate, JPA и iBatis. | Реализация проста. Если полагаться на единую базу данных и прямой запрос, значит, от этого может зависеть цель. |