Evgeniy Krivosheev Vyacheslav Yakovenko Last update: Feb, 2012 Spring Framework Module 4 – DAO, JDBC.

Презентация:



Advertisements
Похожие презентации
Evgeniy Krivosheev Vyacheslav Yakovenko Last update: Feb, 2012 Spring Framework Module 4 – DAO, JDBC.
Advertisements

Evgeniy Krivosheev Vyacheslav Yakovenko Last update: Feb, 2012 Spring Framework Module 4 – JNDI.
Evgeniy Krivosheev Last update: March, 2012 Spring Framework Module 10 – JMS, EJB.
1 Введение Информационные системы Альтернативы задачи доступа к данным Стандарт JPA и коммерческие ORM имплементации Определение ORM Проблемы полного преобразования.
©Павловская Т.А. (СПбГУ ИТМО) Курс «С#. Программирование на языке высокого уровня» Павловская Т.А.
Object Relational Mapping (ORM) Объектно-реляционное отображение.
Java : доступ к базам данных, технология JDBC. Примеры баз данных.
Платформа J2EE Сервис: Java Naming Directory (JNDI) – универсальный сервис хранения объектов в иерархической структуре имен (аналогично файловой системе)
ПЛИСКО ВЯЧЕСЛАВ. Удобная работа с базой данных в PHP.
Платформа J2EE Сервис: Java Naming Directory (JNDI) – универсальный сервис хранения объектов в иерархической структуре имен (аналогично файловой системе)
Object Relational Mapping (ORM) Объектно-реляционное отображение
Разработка телекоммуникационной и информационной системы для прогнозирования аварий и катастроф на НПЗ.
Модуль 5 Рассматриваемые темы: Метаданные Групповая модификация данных Вопросы типизации Дополнительные возможности JDBC API слайд 5-1.
Практическое программирование на Java к.ф.-м.н. Козлов Дмитрий Дмитриевич Кафедра АСВК, Лаборатория Вычислительных комплексов.
Программная иженерия Андрей Дмитриев ©
1 © Luxoft Training 2012 Java: расширенные вопросы Модуль #8.
Ресурсы WPF Два типа ресурсов WPF: объектные ресурсы (object resource) – определенный.NET-объект, который можно использовать многократно; ресурсы сборки.
Программируемый клиент ORACLE Технология Pro C/C++
Преобразования типов В языке C/C++ имеется несколько операций преобразования типов. Они используются в случае, если переменная одного типа должна рассматриваться.
Язык программирования Java Дмитриев Андрей Владиславович Май 2007.
Транксрипт:

Evgeniy Krivosheev Vyacheslav Yakovenko Last update: Feb, 2012 Spring Framework Module 4 – DAO, JDBC

2 Содержание Шаблон проектирования DAO Поддержка JDBC в Spring Framework javax.sql.DataSource Конфигурирование javax.sql.DataSource JdbcTemplate RowMapper JdbcDaoSupport Параметризированные SQL- запросы JdbcTemplate :: Insert / Update / Delete JdbcTemplate :: Другие SQL запросы

3 Spring :: Шаблон проектирования DAO

4

5 BOOK ID: integer TITLE : varchar COMMENT : varchar DATE_RELEASE : timestamp AUTHOR_ID: integer

6 Spring :: Шаблон проектирования DAO Spring DAO – модуль для работы с данными; Упрощает использование таких технологий как JDBC, Hibernate, JDO, etc.; Позволяет относительно просто переключаться с одной технологии на другую; Упрощает обработку специфичных исключений;

7 Spring :: Шаблон проектирования DAO Spring оборачивает все исключения, специфичные для конкретной технологии (например, SQLException), в свою иерархию исключений, где корнем является DataAccessException; Более тонкая проверка исключений Также для Hibernate, JDO и JPA, Spring оборачивает проверяемые исключение и делает из них исключения времени выполнения;

8 Spring :: Шаблон проектирования DAO Абстракция для разработки структуры данных независимо от конкретной БД; Упрощает код и обеспечивает прозрачность бизнес - объектов; Облегчает переносимость с одной БД (ORM, etc.) на другую; Концентрирует механизм доступа к данным на отдельном уровне;

9 Spring :: Поддержка JDBC

10 Spring :: Поддержка JDBC Зачем нам JDBC, если есть ORM? Гибкость: использование всех возможностей СУБД Прозрачность JDBC – все под контролем Производительность Нет магии Почему нам недостаточно простого (plain) JDBC? Утомительная обработка исключений Ручное управление транзакциями Нет маппинга данных на объекты Большое количество сервисного кода

11 Spring :: Пример на чистом JDBC

12 Spring :: Пример на Spring+JDBC

13 Spring :: Сравнение Spring и JDBC

14 Spring :: Поддержка JDBC Основные классы для работы с JDBC в Spring: javax.sql.DataSource - Отвечает за соединение с БД; JdbcTemplate - Основной класс, отвечает за весь процесс выполнения запросов; RowMapper - Отвечает за mapping каждой строки запроса; JdbcDaoSupport - Упрощает конфигурацию и передачу параметров;

15 Spring :: javax.sql.DataSource Интерфейс DataSource – часть JDBC спецификации – фабрика соединений; Spring получает соединение с базой через DataSource; DataSource позволяет спрятать получение соединений и управление транзакциями;

16 Spring :: Получение javax.sql.DataSource Как получить DataSource? Сконфигурировать свой: Это упрощает unit-тестирование; Не нужен веб-контейнер; Через JNDI; Реализации DataSource: Apache DBCP; c3p0;

17 Database Connection Pool (dbcp) Когда новый пользователь запрашивает доступ к БД, ему выдаётся уже открытое соединение из пула соединений Открытие соединения с БД занимает время Если все открытые соединения уже заняты, создаётся новое Как только пользователь освобождает одно из уже существующих соединений, оно становится доступно для других пользователей Если соединение долго не используется, оно закрывается Spring :: Получение javax.sql.DataSource

18 Spring :: Конфигурирование javax.sql.DataSource Используем JNDI: <jee:jndi-lookup id="dataSource" jndi-name="java:comp/env/jdbc/datasource"/>

19 Spring :: Конфигурирование javax.sql.DataSource Для прототипирования и тестирования Spring предоставляет возможность поднятия в контексте встроенных БД (HSQLDB / H2 / Derby). По умолчанию используется HSQLDB. или

20 Spring :: JdbcTemplate JdbcTemplate - основной класс из пакета org.springframework.jdbc.core: Выполняет SQL-запросы; Итерируется по результатам; Отлавливает JDBC исключения; Параметры, необходимые для выполнения SQL-запроса: DataSource; RowMapper; Строка SQL-запроса;

21 Spring :: JdbcTemplate Экземпляр класса JdbcTemplate является потокобезопасным; Можно конфигурировать его один раз, а потом использовать во многих DAO; Для создания JdbcTemplate необходим DataSource; Обычно DataSource передается в DAO, а оттуда в JdbcTemplate;

22 Spring :: RowMapper BOOK ID: integer TITLE : varchar COMMENT : varchar DATE_RELEASE : timestamp Мэппинг данных из БД в объектную модель RowMapper выполняет мэппинг ResultSetа в конкретные объекты ResultSetRowMapper Book mapRow(ResultSet rs, int rowNum)

23 Spring :: RowMapper

24 Spring :: PreparedStatementSetter BOOK ID: integer TITLE : varchar COMMENT : varchar DATE_RELEASE : timestamp Мэппинг данных из объектной модели в SQL PreparedStatementSetter выполняет мэппинг объекта в SQL-запрос SQLPreparedStatement getPreparedStatementSetter (final Book book) +

25 Spring :: PreparedStatementSetter

26 Spring :: JdbcTemplate - пример Создаем таблицы и бизнес-объекты; Конфигурируем DataSource; Создаем класс DAO; Передаем DataSource в DAO; Реализуем RowMapper; Создаем экземпляр JdbcTemplate; Передаем ему DataSource; Вызываем метод query(); Параметры – SQL-запрос и RowMapper;

27 Spring :: JdbcTemplate - пример При вызове метода countryDao.getCountryList() получаем список объектов типа Country.

28 Spring :: JdbcTemplate - пример

29 Spring :: JdbcDaoSupport Можно DAO классы делать наследниками от JdbcDaoSupport; В этом случае метод setDataSource(..) уже будет реализован; JdbcDaoSupport упрощает работу с DataSource и «прячет» создание JdbcTemplate;

30 public class JdbcCustomerDAO extends JdbcDaoSupport implements CustomerDAO { //no need to set datasource here public void insert(Customer customer) { String sql = "INSERT INTO CUSTOMER (CUST_ID, NAME, AGE) + VALUES (?, ?, ?) »; getJdbcTemplate().update(sql, new Object[] { customer.getCustId(), customer.getName(),customer.getAge() }); } <bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource"> Spring :: JdbcDaoSupport

31 Spring :: NamedParameterJdbcTemplate Параметризированные SQL- запросы создаются с использованием NamedParameterJdbcTemplate Конфигурация такая же как для JdbcTemplate;

32 Spring :: ParameterizedRowMapper

33 Spring :: JdbcTemplate :: Insert Insert, Update и Delete выполняются аналогично; Отличия только в SQL-запросе;

34 Spring :: JdbcTemplate :: Другие SQL запросы Для выполнения любого SQL-запроса может быть использован метод execute из JdbcTemplate:

35 Spring :: Иерархия исключений DAO

36 public class CustomSQLErrorCodesTranslator extends SQLErrorCodeSQLExceptionTranslator { protected DataAccessException customTranslate(String task, String sql, SQLException sqlex) { if (sqlex.getErrorCode() == ) { return new DeadlockLoserDataAccessException(task, sqlex); } return null; } private JdbcTemplate jdbcTemoplate; public void setDataSource(DataSource dataSource) { this.jdbcTemplate = new JdbcTemplate(); this.jdbcTemplate.setDataSource(dataSource); CustomSQLErrorCodesTranslator tr = new CustomSQLErrorCodesTranslator(); tr.setDataSource(dataSource); this.jdbcTemplate.setExceptionTranslator(tr); } Spring :: Собственный обработчик исключений DAO

37 Упражнения :6 : «Использование JDBC в Spring при работе с данными» – 45 мин – самостоятельная работа; – 15 мин – обсуждение;

38 Вопросы!?