Annotated SQL Геннадий Дубина разработчик, DataArt, Украина Android-

advertisement
Annotated SQL
Геннадий Дубина
Android-разработчик, DataArt, Украина
Чего хочется
•
•
•
•
•
Описываем схему один раз
Описываем схему в одном месте
Мало кода
Легкость
Читаемость
Создание схемы БД
•
•
•
•
Написание скриптов руками
Срипты/база в ресурсах
Runtime framework для создания схемы
Annotation processor
Inline SQL
External SQL
RF
Annotations
+
-
+
+
+/-
-
-
+
Мало кода
-
-
-
+
Легкость
-
+/-
+
+
Читаемость
-
+
+
+
Один раз
В одном месте
Принцип описания схемы
• Таблица – интерфейс.
– имя таблицы
– имена колонок
– path для провайдера
• Схема – класс/интерфейс
со всеми таблицами
Annotation SQL
•
•
•
•
•
•
•
Это не ORM
Никакой магии
Это утилита/плагин для сокращения количества кода
Все можно посмотреть и потрогать
Плагин для Eclipse
Работает с ant
Работает c Idea
#1 SQL Schema
•
•
•
•
•
•
@Schema – структура, которая описывает схему
@Table – таблица в базе
@Index – индекс на таблице
@PrimaryKey - ключ
@SimpleView – вьюшка в базе
@RawQuery – запрос в контент провайдере
@Schema
Класс содержащий описание всех таблиц, вьюшек, запрос
Атрибуты
• className
• dbName
• dbVersion
@Table
Определяем таблицу
•@Column
– type [INTEGER, REAL, TEXT, BLOB]
– defVal
•@Autoincrement
•@NotNull
•@PrimaryKey
•@Unique[ROLLBACK, ABORT, FAIL, IGNORE, REPLACE]
@Index
Создаем индекс для таблички.
Будет создан индекс с именем idx_<name>
Атрибуты
•name
•columns
@PrimaryKey
Создаем составной Primary Key для таблицы
Атрибуты
•columns
@SimpleView
Создаем view для выборки данных из нескольких таблиц/view
Столбцы создаются с именем <alias>_<column>
Атрибуты
•value – имя view
Определяем вьюшку
• @From
• @ Join
– joinTable – таблица которую присоединяем
– joinColumn
– onTableAlias – алиас таблицы к которой присоединяем
– onColumn
– type [INNER, LEFT, RIGHT, CROSS]
• @RawJoin
– joinTable – таблица переменной
– onCondition – raw sql вашего условия
– type [INNER, LEFT, RIGHT, CROSS]
• @Columns - что выбираем
• @IgnoreColumns – ничего не выбираем
@RawQuery
Создаем sql запрос который будет выполняться в Content Provider.
Как и view только с параметрами
Атрибуты
•value – имя запроса
Плюшки
•@SqlQuery
Валидация схемы
•
•
•
•
•
•
•
•
•
Таблица без столбцов
Более одного PrimaryKey для таблицы
Индекс не содержит полей
Дублирующиеся названия таблиц/вьюшек
Существование @From во вьюшке
Существование колонок в таблицах/view @From/@Join
Дублирующиеся alias во view
Пустое название таблицы/столбца/индекса/вьюшки
Индекс можно определить только для таблицы
#2 Content Provider
Создаем полноценный провайдер с помощью нескольких строк при
этом сохраняем human style
Поддерживает:
•no-notify
•limit
•alternative notify uri
•bulkInsert
•triggers
Аннотации
•
•
•
•
@Provider – помечаем схему
@URI – таблица/вью доступно через контент провайдер
@Trigger – обработчик на действие с таблицей
@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<Name><When>Inserted(ContentValues values)
•on<Name><When>Deleted(Uri uri, String selection, String[]
selectionArgs)
•on<Name><When>Updated(Uri uri, ContentValues values, String
selection, String[] selectionArg)
Human Style
Вопросы?
Download