Upload
alex-tumanoff
View
964
Download
9
Embed Size (px)
DESCRIPTION
"AnnotatedSQL - провайдер с плюшками за 5 минут" Геннадий Дубина, Senior Software Developer в DataArt, г. Херсон
Citation preview
ANNOTATED SQL
Геннадий Дубина
• Таблица – интерфейс• Содержит
– имя таблицы– имена колонок– path для провайдера
• Схема – класс/интерфейс со всеми таблицами
Принцип описания схемы
Что хочется• Описываем схему один раз• Описываем схему в одном месте• Мало кода• Легкость• Читаемость
Создание схемы БД
• Написание скриптов руками• Срипты/база в ресурсах• Runtime framework для создания схемы• Annotation processor
Inline SQL External SQL RF Annotations
Один раз + - + +
В одном месте +/- - - +
Мало кода - - - +
Легкость - +/- + +
Читаемость - + + +
Annotation SQL• Это не ORM• Никакой магии• Это утилита/плагин для сокращения
количества кода• Все можно посмотреть и потрогать • Работает с ant
#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 для таблицыАтрибуты• collumns
@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
Поддерживает: • no-notify• limit• alternative notify uri• bulkInsert• triggers
Создаем полноценный провайдер с помощью нескольких строк при этом сохраняем human style
Аннотации• @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
Вопросы?