Статьи

Взаимодействие базы данных с шаблонами проектирования DAO и DTO

DAO означает объект доступа к данным и является шаблоном промышленного дизайна. В этой статье я расскажу, что такое DAO и как создать DAO. Я также расскажу о значении создания объектов доступа к данным.

Существуют инструменты, которые могут генерировать код DAO для приложения. Но можно также написать классы DAO вручную. Еще один шаблон проектирования, тесно связанный с DAO, — это DTO (объект доступа к данным).

Шаблон проектирования DAO помогает приложению выполнять различные операции CRUD над базой данных. Классы DAO предоставляют методы для вставки, удаления, обновления и методов поиска. Основной целью создания DAO является слабая связь и неповторение кода.

В любом приложении, которое будет взаимодействовать с базой данных, необходимо выполнять операции CRUD над таблицами базы данных, и поскольку операции над таблицами могут выполняться разными классами, и, следовательно, повторение одного и того же кода в разных классах становится затруднительным. Более того, даже после повторения кода становится трудно поддерживать код взаимодействия с базой данных, когда требуются изменения в способе взаимодействия с базой данных.

Чтобы преодолеть вышеупомянутые проблемы, была изобретена схема проектирования DAO. Предполагается, что шаблон DAO имеет интерфейс, класс и фабрику DAO, соответствующие каждой таблице в таблице. Например, если в базе данных есть имя таблицы Employees, то должен существовать интерфейс с именем EmployeesDAO, класс с именем EmployeesDAOImpl и фабричный класс EmployeeDAOFactory.

Интерфейс EmployeesDAO должен выглядеть примерно так:

package com.company.app.dao;public interface {    public Employee[] findAll() throws SQLException;    public Employee findByPK(EmployeePK) throws SQL Exception;    public Employee[] findbyemployeename(String EmployeeName) throws SQLException;    public boolean insert(Employee employee) throws SQLException;    public boolean update(Employee employee) throws SQLException;   public boolean delete(Employee employee) throws SQLException;}

Класс реализации DAO выглядит так:

package com.company.aap.doaimpl;public class EmployeeDAOImpl implements EmployeeDAO {    Connection con;    ResultSet rs;    PreparedStatement stmt;    public Employee[] findAll() throws SQLException {        Employee[] employees;        String SQL_QUERY= “Select * from Employee”;        con=ResourceManager.getConnection();        stmt = con.prepareStatement(SQL_QUERY);        rs = stmt.executeQuery();       while(rs.next) {            //get columns and store in array       }        return employees;   }   public Employee findByPK(EmployeePK) throws SQL Exception {       //Implementation code   }    public Employee[] findbyemployeename(String EmployeeName) throws SQLException{       //Implementation code    }    public boolean insert(Employee employee) throws SQLException{        //Implementation code    }    public boolean update(Employee employee) throws SQLException{        //Implementation code    }    public boolean delete(Employee employee) throws SQLException{        //Implementation code     }}

В приведенном выше коде реализации DAO класс Employee является объектом передачи данных, который имеет переменные-члены, соответствующие таблице Employee в базе данных. Таким образом, Employee — это POJO в некотором смысле с геттерами и сеттерами для переменных-членов.

Класс DAO Factory, который представляет собой EmployeeDAOFactory, используется для возврата объекта EmployeeDAOImpl. Вот код для DAO facrory для EmployeeDAO:

package com.company.app.factory;public class EmployeeDAOFactory {      public static EmployeeDAO create() {           return (new EmployeeDAOImpl());      }}

В EmployeeDAOImpl есть класс ResourceManager, цель которого — создать соединение с базой данных и вернуть его обратно. Таким образом, этот класс действует как вспомогательный класс для различных других классов реализации DAO.

Как я уже упоминал в начале этой статьи, есть инструменты, которые могут генерировать для вас код класса DAO, DTO и Factory. Эти инструменты полезны, потому что они автоматизируют генерацию классов DAO. Важность этих инструментов даже становится большой на начальном этапе разработки приложений, потому что схема базы данных часто сохраняет изменения и, следовательно, вручную вносит изменения в таблицы базы данных и код DAO. Здесь я перечисляю инструменты, которые могут генерировать код DAO для приложений Java:

  1. FireStrom DAO от Codefutures
  2. DaoGen от TitanicLinux.net
  3. Dao4J
  4. БД Визуал Архитектор

Эти инструменты выполняют импорт таблиц из базы данных, запрашивая сведения о соединении, а затем генерируют классы DAO / DTO на основе импортируемых таблиц. Еще один важный момент, который полезен при использовании этих инструментов, заключается в том, что они проверяют первичные и внешние ключи структуры таблицы. Кроме того, типы данных базы данных преобразуются в соответствующие типы данных в Java в классах DAO / DTO.

После того, как код был сгенерирован этими инструментами, всегда можно изменить код для оптимизации кода DAO.

Всегда помните, что DAO, DTO, Factory, Loose Coupling (принцип SOLID), шаблоны проектирования Factory все вместе. Можно также создать пул соединений при использовании шаблона проектирования DAO. Важным моментом является то, что код становится чистым и понятным при использовании шаблонов проектирования DAO, DTO.

От http://extreme-java.blogspot.com/2011/05/database-interaction-daodto.html