Шаблон DAO в Java: работа с БД через объект

Data Access Object. Нужен чтобы отделить низкоуровневый доступ к данным от высокоуровневых сервисов.

Низкоуровневый доступ – это, например, взаимодействие с базой с помощью средств JDBC. Мы можем сокрыть прямое использование средств JDBC (то есть, например, подключение к базе, извлечение данных из базы с помощью каких-то сложных цепочек JDBC методов, или сокрыть некоторые SQL запросы) в DAO объекте и уже в высокоуровневых сервисах (в main, например) взаимодействовать с данными базы через методы DAO объекта.

То есть всё низкоуровневое взаимодействие с БД с помощью JDBC происходит в методах DAO объекта, а высокоуровневые сервисы просто используют эти методы.

Для примера в программе ниже лучше пусть ресурсом будет не база, а List коллекция, так будет проще.

import java.util.ArrayList; import java.util.Arrays; import java.util.List; //Создадим простейший класс машины. //Экземпляры класса Car будут храниться //в List. class Car { private String brand; private int speed; Car(String brand, int speed){ this.brand = brand; this.speed = speed; } public String getBrand() { return brand; } public void setBrand(String brand) { this.brand = brand; } public int getSpeed() { return speed; } public void setSpeed(int speed) { this.speed = speed; } @Override public String toString() { return “Car{” + “brand=” + brand + “, speed=” + speed + ‘}’; } } //Создадим интерфейс на основе которого //будет создаваться DAO класс на основе //которого будет создаваться DAO объект. interface DAOInterface { public List getAllCars(); public Car getCar(int carNum); public void updateCar(Car car, int carNum); public void deleteCar(Car car); } //Создаем этот DAO класс //реализуя интерфейс выше. class DAOImpl implements DAOInterface { //Вместо сокрытия в DAO классе низкоуровневого //взаимодействия с БД будем скрывать //низкоуровневое взаимодействие //со списком машин listOfCars. List listOfCars; public DAOImpl(){ //Пусть при создании DAO объекта //список инициализируется данными. listOfCars = new ArrayList(Arrays.asList( new Car(“Mazda”,200), new Car(“chevrole”,150))); } // В методах ниже скрываем взаимодействие с List // То есть как можно увидеть ниже все методы // класса List для низкоуровневого взаимодействия // с объектом List (например remove(), get()) // сокрыты в методах DAO класса (в методах // deleteCar(), getCar(), updateCar()) которыми // будут пользоваться высокоуровневые сервисы. @Override public void deleteCar(Car car) { listOfCars.remove(car.getSpeed()); } @Override public List getAllCars() { return listOfCars; } @Override public Car getCar(int carNum) { return listOfCars.get(carNum); } @Override public void updateCar(Car car, int carNum) { Car carfromlist = listOfCars.get(carNum); carfromlist = car; } } //Воспользуемся уже DAO объектом //в высокоуровневом сервисе (в мейн). public class DAOExample { public static void main(String args[]) { //Через DAO объект dao будем //взаимодействовать с ресурсом(списком). DAOInterface dao = new DAOImpl(); //Как видим все непосредственное //взаимодействие со списком сокрыто //в DAO объекте, а в мейн мы //взаимодействуем со списком посредством //методов DAO объекта. Car car = dao.getCar(1); System.out.println(car); car.setBrand(“Toyota”); dao.updateCar(car, 1); System.out.println(dao.getCar(1)); } }

Скомпилируем java файл и запустим программу.

Как видим, объект машины в списке был изменен с помощью методов DAO объекта, а не напрямую.  

О DAO шаблоне будет еще много говориться в разделе посвященном spring.

Шаблон Front Controller: централизованная обработка запросов

Front Controller в Java: централизованная обработка запросов. Паттерн для маршрутизации HTTP-запросов через единую точку входа в веб-приложениях.
Time to read: 14

Шаблон Template: поведение по умолчанию

Узнайте, как паттерн Template задает скелет алгоритма в Java. Абстрактный класс определяет последовательность шагов, позволяя подклассам переопределять этапы.
Time to read: 14

Что такое Spring Framework и зачем он нужен

Spring Framework: основы DI и IoC. Узнайте, как работать с бинами, BeanFactory и XML-конфигурацией на примере.
Time to read: 20