Annotated SQL Геннадий Дубина Android-разработчик, DataArt, Украина
Чего хочется Описываем схему один раз Описываем схему в одном месте Мало кода Легкость Читаемость
Создание схемы БД Написание скриптов руками Срипты/база в ресурсах Runtime framework для создания схемы Annotation processor
Inline SQLExternal SQLRFAnnotations Один раз +-++ В одном месте +/---+ Мало кода ---+ Легкость -+/-++ Читаемость -+++
Принцип описания схемы Таблица – интерфейс. –имя таблицы –имена колонок –path для провайдера Схема – класс/интерфейс со всеми таблицами
Annotation SQL Это не ORM Никакой магии Это утилита/плагин для сокращения количества кода Все можно посмотреть и потрогать Плагин для Eclipse Работает с ant Работает c Idea
#1 SQL – структура, которая описывает – таблица в – индекс на - – вьюшка в – запрос в контент провайдере
@ Schema Класс содержащий описание всех таблиц, вьюшек, запрос Атрибуты className dbName dbVersion
@Table Определяем –type [INTEGER, REAL, TEXT, ABORT, FAIL, IGNORE, REPLACE]
@Index Создаем индекс для таблички. Будет создан индекс с именем idx_ Атрибуты name columns
@PrimaryKey Создаем составной Primary Key для таблицы Атрибуты columns
@SimpleView Создаем view для выборки данных из нескольких таблиц/view Столбцы создаются с именем _ Атрибуты value – имя view
Join –joinTable – таблица которую присоединяем –joinColumn –onTableAlias – алиас таблицы к которой присоединяем –onColumn –type [INNER, LEFT, RIGHT, –joinTable – таблица переменной –onCondition – raw sql вашего условия –type [INNER, LEFT, RIGHT, - что – ничего не выбираем
@RawQuery Создаем sql запрос который будет выполняться в Content Provider. Как и view только с параметрами Атрибуты value – имя запроса
Валидация схемы Таблица без столбцов Более одного PrimaryKey для таблицы Индекс не содержит полей Дублирующиеся названия таблиц/вьюшек во вьюшке Существование колонок в таблицах/view Дублирующиеся alias во view Пустое название таблицы/столбца/индекса/вьюшки Индекс можно определить только для таблицы
#2 Content Provider Создаем полноценный провайдер с помощью нескольких строк при этом сохраняем human style Поддерживает: no-notify limit alternative notify uri bulkInsert triggers
– помечаем – таблица/вью доступно через контент – обработчик на действие с
@Provider Атрибуты: name schemaClass authority openHelperClass
@URI type [DIR, ITEM, DIR_AND_ITEM] сolumn – по умолчанию _id altNotify onlyQuery – по умолчанию false все опционально
Пример
@Trigger Атрибуты: name type [INSERT, DELETE, UPDATE, ALL] when [BEFORE, AFTER] Методы: on Inserted(ContentValues values) on Deleted(Uri uri, String selection, String[] selectionArgs) on Updated(Uri uri, ContentValues values, String selection, String[] selectionArg)
Human Style
Вопросы?