Слайд 2
Аннотации в Java
(java annotation types)
Аннотации представляют собой
некие метаданные, которые могут добавлятся в исходный код программы
и семантически не влияют на нее, но могут использоваться в процессе анализа кода, компиляции и даже во время выполнения.
Слайд 3
Вот основные варианты использования аннтоаций:
предоставлять необходимую информацию для
компилятора;
предоставлять метаданные различным инструментам для генерации кода, конфигураций и
т.д.;
использоваться в коде во время выполнения програмного кода (reflection).
Аннотации могут быть применены, например, к декларациям классов, полей, методов, ну и конечно же аннотаций :).
Слайд 4
Для описания новой аннотации используется ключевое слово @interface. Вот
банальный пример аннотации:
public @interface Description {
String title();
int
version() default 1;
String text();
}
Слайд 5
пример ее использования:
@Description(title="title", version=2, text="text")
public class Clazz
{ /* */ }
Слайд 6
Maven
это инструмент для сборки Java проекта: компиляции, создания
jar, создания дистрибутива программы, генерации документации
Слайд 7
Преимущества Maven:
Независимость от OS. Сборка проекта происходит в любой операционной
системе. Файл проекта один и тот же.
Управление зависимостями. Редко какие
проекты пишутся без использования сторонних библиотек (зависимостей). Эти сторонние библиотеки зачастую тоже в свою очередь используют библиотеки разных версий. Мавен позволяет управлять такими сложными зависимостями. Что позволяет разрешать конфликты версий и в случае необходимости легко переходить на новые версии библиотек.
Возможна сборка из командной строки. Такое часто необходимо для автоматической сборки проекта на сервере (Continuous Integration).
Хорошая интеграция с средами разработки. Основные среды разработки на java легко открывают проекты которые собираются c помощью maven. При этом зачастую проект настраивать не нужно - он сразу готов к дальнейшей разработке. Как следствие - если с проектом работают в разных средах разработки, то maven удобный способ хранения настроек. Настроечный файл среды разработки и для сборки один и тот же - меньше дублирования данных и соответственно ошибок.
Декларативное описание проекта.
Слайд 8
Вся структура проекта описывается в файле: pom.xml (POM – Project
Object Model), который должен находиться в корневой папке проекта.
Ключевым
понятием Maven является артефакт — это, по сути, любая библиотека, хранящаяся в репозитории (месте хранения). Это может быть какая-то зависимость или плагин.
Зависимости — это те библиотеки, которые непосредственно используются в вашем проекте для компиляции кода или его тестирования.
Плагины используются самим Maven'ом при сборке проекта или для каких-то других целей (деплоймент, создание файлов проекта для Eclipse и др.).
Архетип — это некая стандартная компоновка файлов и каталогов в проектах различного рода (веб, swing-проекты и прочие). Другими словами, Maven знает, как обычно строятся проекты и в соответствии с архетипом создает структуру каталогов.
Слайд 9
Жизненный цикл
validate — проверяет корректность метаинформации о проекте
compile — компилирует
исходники
test — прогоняет тесты классов из предыдущего шага
package — упаковывает скомпилированые
классы в удобноперемещаемый формат (jar или war, к примеру)
integration-test — отправляет упаковынные классы в среду интеграционного тестирования и прогоняет тесты
verify — проверяет корректность пакета и удовлетворение требованиям качества
install — добавляет пакет в локальный репозиторий, откуда он будет доступен для использования как зависимость в других проектах
deploy — отправляет пакет на удаленный production сервер, откуда другие разработчики его могут получить и использовать
Слайд 10
чтобы подключить Spring Framework необходимо определить следующую зависимость:
org.springframework
spring
2.5.5
Слайд 11
Object Relational Mapping (ORM)
Объектно-реляционное отображение
Слайд 12
Взаимодействие между типами баз данных и подходами доступа
к данным
Слайд 13
Примеры реляционной и объектной модели
Реляционная модель
Объектная модель предметной
области
CATALOG_ITEM отображается на иерархию классов в зависимости от значения
дискриминатора ITEM_TYPE
Слайд 14
Отображение
таблицы CATALOG и класса Catalog.java
Класс Catalog
связан с таблицей CATALOG
Первичный ключ – ID, связан
со свойством id (функции getId()/setId())
Для генерации значений первичного ключа ID используется sequence SEQ_ID
Атрибут NAME связан со свойством name (функции getName()/setName())
Объекты Catalog содержат список CatalogItem
связь “один-ко-многим” (@OneToMany),
обязательная (nullable=false)
Внешний ключ, определяющий связь – CATALOG_ID
Список CatalogItem загружаются по-требованию (FetchType.LAZY)
При сохранении объекта Catalog автоматически сохраняются все его items (CascadeType.ALL)
Слайд 15
Работа с Hibernate API
Работая с данными в
объектно-ориентированном языке, мы работаем с объектами, заполняя и считывая
значения полей, создавая новые или изменяя существующие объекты, определяя зависимости между объектами
При операции save() мы передаем объект типа Catalog, который сохраняется в базу данных по описанным правилам отображения. В том числе сохраняются и все зависимые объекты (CatalogItem)
Составляя запросы к базе данных, мы уже указываем не столбцы таблицы, а свойства объектов
Слайд 16
Протокол команд SQL
Oracle
Hibernate: select SEQ_ID.nextval from dual
Hibernate: select
SEQ_ID.nextval from dual
Hibernate: select SEQ_ID.nextval from dual
Hibernate: select SEQ_ID.nextval
from dual
Hibernate: select SEQ_ID.nextval from dual
Hibernate: insert into CATALOG (NAME, ID) values (?, ?)
Hibernate: insert into AUTHOR (NAME, BIRTHDATE, id) values (?, ?, ?)
Hibernate: insert into CATALOG_ITEM (NAME, AUTHOR_ID, CATALOG_ID, ISBN, ITEM_TYPE, id) values (?, ?, ?, ?, 'BOOK', ?)
Hibernate: insert into AUTHOR (NAME, BIRTHDATE, id) values (?, ?, ?)
Hibernate: insert into CATALOG_ITEM (NAME, AUTHOR_ID, CATALOG_ID, GENRE, ITEM_TYPE, id) values (?, ?, ?, ?, 'MOVIE', ?)
Hibernate: update CATALOG_ITEM set CATALOG_ID=? where id=?
Hibernate: update CATALOG_ITEM set CATALOG_ID=? where id=?
Hibernate: select catalog0_.ID as ID0_, catalog0_.NAME as NAME0_ from CATALOG catalog0_
SQL Server
Hibernate: insert into CATALOG (NAME) values (?)
Hibernate: insert into AUTHOR (NAME, BIRTHDATE) values (?, ?)
Hibernate: insert into CATALOG_ITEM (NAME, AUTHOR_ID, CATALOG_ID, ISBN, ITEM_TYPE) values (?, ?, ?, ?, 'BOOK')
Hibernate: insert into AUTHOR (NAME, BIRTHDATE) values (?, ?)
Hibernate: insert into CATALOG_ITEM (NAME, AUTHOR_ID, CATALOG_ID, GENRE, ITEM_TYPE) values (?, ?, ?, ?, 'MOVIE')
Hibernate: update CATALOG_ITEM set CATALOG_ID=? where id=?
Hibernate: update CATALOG_ITEM set CATALOG_ID=? where id=?
Hibernate: select catalog0_.ID as ID0_, catalog0_.NAME as NAME0_ from CATALOG catalog0_
Слайд 17
Возможности ORM
Загрузка связанных объектов “по требованию” (lazy loading)
Обеспечение
пессимистической/оптимистической блокировок
Кэширование загруженных объектов
SQL-подобные запросы по объектной модели
Слайд 18
Преимущества ORM
Нет необходимости писать рутинные insert/update/delete/select для CRUD
операций
Условия связи между объектами (строками таблиц) указываются декларативно в
одном месте.
Возможность использовать полиморфные запросы для иерархий классов
Высокая степень независимости от конкретной СУБД
Слайд 19
Недостатки ORM
Возможны проблемы с производительностью для сложных запросов
на объектном SQL.
Затрудняет использование специфических конструкций языка SQL конкретной
СУБД.
Слайд 20
Реализации ORM
Hibernate/NHibernate www.hibernate.org (Java / .NET 1.1,2.0)
Oracle® TopLink®
(Java)
iBatis framework (Java, .NET) http://ibatis.apache.org/
JPOX Java Data Objects (Java)
http://www.jpox.org
…
Слайд 21
Стандарты ORM
EJB 1.1 Entity Beans
Java Data Object (JDO)
JPOX
OpenAccess
JDO
EJB 3.0 Persistence API
Hibernate
Oracle TopLink