Разница между Spring DAO, Spring ORM и Spring JDBC

Опубликовано: 10 Января, 2023

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 со следующим

  • SessionFactory для Hibernate
  • EntityManagerFactory для JPA
  • SqlSessionFactory для MyBatis
Для простых вызовов JDBC.
Реализация доступа к данным полностью отделена и, следовательно, не зависит от базы данных. Внедрение нескольких технологий возможно за счет интеграции с необходимыми инструментами. Если приложение не сложное и диверсифицированное и лежит на одной базе данных, мы можем это использовать и это эффективно.
Необходимо указать дополнительный слой и его зависимости. Следовательно, запуск может занять некоторое время, если приложение сложное. Необходимо указать дополнительный слой и его зависимости. Следовательно, запуск может занять некоторое время, если приложение сложное. Поскольку это просто, никаких сложных зависимостей не требуется, но переносимость станет меньше, если мы будем использовать это.
Проблемы с обслуживанием возникнут из-за сложности дополнительного слоя. Проблемы с обслуживанием возникнут из-за сложности дополнительного слоя. Здесь меньше обслуживания только.
Шаблоны проектирования, такие как классы Factory и объект передачи данных (DTO), необходимы для реализации вместе с DAO. Получил поддержку нескольких технологий, таких как Hibernate, JPA и iBatis. Реализация проста. Если полагаться на единую базу данных и прямой запрос, значит, от этого может зависеть цель.