Скачать презентацию
Идет загрузка презентации. Пожалуйста, подождите
Презентация была опубликована 11 лет назад пользователемИлья Шуняев
1 Saint Petersburg, 2011 Java Lecture #A01 JDBC
2 Транзакции ACID: Atomicity, Consistency, Isolation, Durability Atomicity: в контексте транзакции либо выполняются все действия, либо не выполняется ни одно из них. Либо происходит commit (фиксация), либо rollback (откат). Consistency: системные ресурсы должны пребывать в целостном и непротиворечивом состоянии как до начала транзакции, так и после ее окончания. Isolation: промежуточные результаты транзакции должны быть закрыты для доступа со стороны любой другой действующей транзакции до момента фиксации. Durability: результат выполнения завершенной транзакции не должен быть утрачен ни при каких условиях. 2
3 Проблемы изоляции транзакций потерянное обновление (lost update): «грязное» чтение (dirty read) чтение данных, которые были записаны откаченной транзакцией: 3
4 Проблемы изоляции транзакций неповторяющееся чтение (non-repeatable read); фантомное чтение (phantom reads). 4
5 Уровни изоляции транзакций Read uncommitted, Read committed, Repeatable read, Serializable Read uncommitted: разрешает грязные чтения, но без потери обновлений. Одна транзакция может не писать в строку, если другая незафиксированная транзакция уже записывает туда. Однако, любая транзакция может читать любые строки. Read committed : разрешает неповторяемые чтения, но не грязные чтения. Это может быть достигнуто с помощью мгновенных общих блокировок чтения и эксклюзивной блокировки записи. Однако, незафиксированные пишущие транзакции блокируют все другие транзакции на доступ к строке. 5
6 Уровни изоляции транзакций Repeatable read : не допускает ни неповторяемого чтения, ни грязного чтения. Фантомное чтение может произойти. Это может быть достигнуто с использованием общих блокировок на чтение и эксклюзивной блокировки на запись. Блок чтения пишущих транзакций (но не другие операции чтения) и блок пишущих транзакций блокируют все другие транзакции Serializable : обеспечивает строгую изоляцию транзакций. Он эмулирует последовательное выполнение операций, как если бы операция была выполнена одна за другой последовательно, а не параллельно.. 6
7 Уровни изоляции транзакций Выбор уровня изоляции зависит от конкретной задачи 7
8 Реализация изоляции Блокировка - это установка метки на запись, что запись заблокирована для изменений. Существует два вида блокировок - оптимистичная и пессимистичная. При оптимистичной блокировке на базе данных реальной блокировки не происходит. Для реализации оптимистичной блокировки часто используется версионирование данных - в таблицу добавляется колонка, которая хранит текущую версию. При выполнении update в запросе в секции where передается версия данных, которая была забрана на изменение. Вместо версии можно хранить время последнего изменения данных. При пессимистичной блокировке для записи ставится эксклюзивная блокировка на уровне базы данных, запрещая таким образом доступ к данным из других транзакций. Существует несколько видов пессимистичных блокировок: блокировка при чтении и блокировка при записи. 8
9 Разновидности транзакций Обычная транзакция Длинная транзакция XA-транзакция 9
10 JDBC JDBC: Java Data Base Connectivity 10 Платформенно-независимый промышленный стандарт взаимодействия Java-приложений с различными СУБД, реализованный в виде пакета java.sql, входящего в состав Java SE. (С) Википедия
11 JDBC JDBC в архитектурном разрезе 11
12 JDBC 12 Строка соединения с базой: jdbc: : Subprotocol: oracle, mysql, odbc, firebird jdbc:odbc:dsn_name;UID=your_uid;PWD=your_pwd jdbc:mysql://host_name:port/dbname ce_name JDBC – это просто:
13 Connection 13 Connection: осуществляет соединение с БэДэ и создает Statementы Основной интерфейс для работы с базой данных Является ограниченным невозобновляемым ресурсом
14 Connection 14 Закрывай Connection или будешь ловить барабашек
15 Connection 15 Закрывай Connection правильно
16 Statements 16 Statement - the object used for executing a static SQL statement and returning the results it produces Prepared Statement - an object that represents a precompiled SQL statement Callable Statement - the interface used to execute SQL stored procedures.
17 Statement 17 Statement – простое исполнение статических SQL запросов.
18 PreparedStatement 18 PreparedStatement – исполнение скомпилированных запросов Выполняется быстрее, чем Statement Предохраняет от SQL Injection Подобный шаблон используется в Hibernate и JPA
19 CallableStatement 19 CallableStatement – исполнение хранимых процедур
20 ResultSet 20 ResultSet: курсор текущего запроса Является мощным средством для итерации по набору данных Позволяет выполнять удаление, вставку и обновление столбцов Но для этого не используется
21 ResultSetMetaData 21 Предоставляет мета данные запроса
22 Общие правила На 1 (один) Statement – 1 (один) ResultSet Открыл – закрой! Statement можно (и даже нужно) использовать повторно В серьезных проектах использовать только PreparedStatement Помни про транзакцию 22
23 Архитектура доступа к данным Смешивание SQL кода и реализации является в Java антипаттерном (не действительно в Индии) Ни в коем случае не допускается вызов SQL из view или controller Соединения лучше пуллировать А еще лучше использовать типовые решения 23
24 Active Record Объект является "обёрткой" одной строки из БД или представления, включает в себя доступ к БД и логику обращения с данными. Используется в YII, RoR, Lift Очень удобен для использования с документо- ориентированными базами данных 24
25 Data mapper Использует шаблон Bridge Реализован в JDO и iBatis Не нужно специально аннотировать или менять классы. 25
26 Data mapper Использует шаблон Bridge Реализован в JDO и iBatis Не нужно специально аннотировать или менять классы. 26
27 Table Data Gateway Работает со всеми записями в таблице 27
28 DAO Является классическим Core J2EE паттерном 28
29 Lazy Load Использует шаблон Proxy Поддерживается нативно JPA и Hibernate. Основные сложности связаны с временем жизни proxy 29
30 Query Object Поддерживается нативно JPA и Hibernate. Является реализацией шаблона - ???? 30
31 Unit of Work Поддерживается нативно JPA и Hibernate. Сложен в своей реализации 31
32 Domain Model Объектная модель домена используется как правило с ORM. Нужна при сложной бизнес-логике 32
33 ORM Object-relational mapping - объектно-реляционное отображение. Несколько таблиц или записей из таблиц могут относиться к одному объекту. Используется при сложных связях между доменными объектами Самый известный ORM фреймворк – Hibernate. 33
34 Hibernate 34
35 Hibernate Проект стартовал в 2001 году и создавался как альтернатива EJB2 Entity Bean В 2003 году стартовала версия 2. Это стал тот Хибернейт, который мы знаем. В 2010 году стартовала версия 3. JPA 1.0 был частично списан с Hibernate 2 JPA 2.0 был частично списан с Hibernate
36 Hibernate - возможности Полный ORM без единого кусочка SQL Управление транзакциями (только в рамках БД) Кеш L2 Оптимизация под конкретные диалекты Поддержка annotation-based и xml-based маппинга Свой язык запросов – HQL Умеет работать в non-manager enviroment Стыкуется из коробки со всем стеком Jboss Отлично интегрируется в Spring, JPA Умеет работать с EhCache, Memcache, Jboss Cache 36
37 Hibernate – архитектура 37
38 Hibernate - Entity 38 Основа Hibernate - Entity Маппинг может осуществляться автоматом или вручную к колонке. Обязательно в каждой Entity должен быть id! Аннотировать можно поля или геттеры Обязателен пустой дефолтный конструктор
39 Hibernate 39 Вся мощь ORM раскрывается в связях Связи бывают OneToOne, OneToMany, ManyToOne, ManyToMany
40 Hibernate Session 40 Управляет жизненным циклом Entity Позволяет осуществлять UnitOfWork Позволяет делать длинные транзакции Умеет делать Conversation Scope
41 Hibernate - конфигурация 41
42 Hibernate пример – вставка данных 42
Еще похожие презентации в нашем архиве:
© 2024 MyShared Inc.
All rights reserved.