ANNOTATED SQL  Геннадий Дубина
Принцип описания схемы• Таблица – интерфейс• Содержит  – имя таблицы  – имена колонок  – path для провайдера• Схема –  кла...
Что хочется•   Описываем схему один раз•   Описываем схему в одном месте•   Мало кода•   Легкость•   Читаемость
Создание схемы БД•   Написание скриптов руками•   Срипты/база в ресурсах•   Runtime framework для создания схемы•   Annota...
Inline SQL   External SQL   RF   AnnotationsОдин раз            +             -         +        +В одном месте      +/-  ...
Annotation SQL• Это не ORM• Никакой магии• Это утилита/плагин для сокращения  количества кода• Все можно посмотреть и потр...
#1 SQL Schema•   @Schema•   @Table•   @Index•   @PrimaryKey•   @SimpleView•   @RawQuery
@SchemaКласс содержащий описание всех таблиц ивьюшекАтрибуты  • className  • dbName  • dbVersion
@TableДефайним таблицу• @Column    – type [INTEGER, REAL, TEXT, BLOB]    – defVal•   @Autoincrement•   @NotNull•   @Primar...
@IndexСоздаем индекс для таблички. Будет созданиндекс с именем idx_<name>Атрибуты• name• columns
@PrimaryKeyСоздаем составной Primary Key для таблицыАтрибуты• collumns
@SimpleViewСоздаем view для выборки данных из несколькихтаблиц/viewСтолбцы создаются с именем <alias>_<column>Атрибуты• va...
Дефайним вьюшку• @From• @ Join  –   joinTable – таблица которую присоединяем  –   joinColumn  –   onTableAlias – алиас таб...
@RawQueryСоздаем sql запрос который будет выполняться вcontent provider.Как и view только с параметрамиАтрибуты• value – и...
Валидация схемы• Таблица без столбцов• Более одного PrimaryKey для таблицы• Индекс не содержит полей• Дублирующиеся назван...
• Пустое название  таблицы/столбца/индекса/вьюшки• Индекс можно определить только для  таблицы
#2 Content ProviderСоздаем полноценный провайдер с помощьюнескольких строк при этом сохраняем human styleПоддерживает:• no...
Аннотации•   @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...
Human Style
Вопросы?
"AnnotatedSQL - провайдер с плюшками за 5 минут" - Геннадий Дубина, Senior Software Developer в DataArt, г. Херсон
"AnnotatedSQL - провайдер с плюшками за 5 минут" - Геннадий Дубина, Senior Software Developer в DataArt, г. Херсон
"AnnotatedSQL - провайдер с плюшками за 5 минут" - Геннадий Дубина, Senior Software Developer в DataArt, г. Херсон
"AnnotatedSQL - провайдер с плюшками за 5 минут" - Геннадий Дубина, Senior Software Developer в DataArt, г. Херсон
"AnnotatedSQL - провайдер с плюшками за 5 минут" - Геннадий Дубина, Senior Software Developer в DataArt, г. Херсон
"AnnotatedSQL - провайдер с плюшками за 5 минут" - Геннадий Дубина, Senior Software Developer в DataArt, г. Херсон
"AnnotatedSQL - провайдер с плюшками за 5 минут" - Геннадий Дубина, Senior Software Developer в DataArt, г. Херсон
"AnnotatedSQL - провайдер с плюшками за 5 минут" - Геннадий Дубина, Senior Software Developer в DataArt, г. Херсон
Upcoming SlideShare
Loading in …5
×

"AnnotatedSQL - провайдер с плюшками за 5 минут" - Геннадий Дубина, Senior Software Developer в DataArt, г. Херсон

1,316
-1

Published on

"AnnotatedSQL - провайдер с плюшками за 5 минут"
Геннадий Дубина, Senior Software Developer в DataArt, г. Херсон

0 Comments
0 Likes
Statistics
Notes
  • Be the first to comment

  • Be the first to like this

No Downloads
Views
Total Views
1,316
On Slideshare
0
From Embeds
0
Number of Embeds
9
Actions
Shares
0
Downloads
2
Comments
0
Likes
0
Embeds 0
No embeds

No notes for slide

"AnnotatedSQL - провайдер с плюшками за 5 минут" - Геннадий Дубина, Senior Software Developer в DataArt, г. Херсон

  1. 1. ANNOTATED SQL Геннадий Дубина
  2. 2. Принцип описания схемы• Таблица – интерфейс• Содержит – имя таблицы – имена колонок – path для провайдера• Схема – класс/интерфейс со всеми таблицами
  3. 3. Что хочется• Описываем схему один раз• Описываем схему в одном месте• Мало кода• Легкость• Читаемость
  4. 4. Создание схемы БД• Написание скриптов руками• Срипты/база в ресурсах• Runtime framework для создания схемы• Annotation processor
  5. 5. Inline SQL External SQL RF AnnotationsОдин раз + - + +В одном месте +/- - - +Мало кода - - - +Легкость - +/- + +Читаемость - + + +
  6. 6. Annotation SQL• Это не ORM• Никакой магии• Это утилита/плагин для сокращения количества кода• Все можно посмотреть и потрогать• Работает с ant
  7. 7. #1 SQL Schema• @Schema• @Table• @Index• @PrimaryKey• @SimpleView• @RawQuery
  8. 8. @SchemaКласс содержащий описание всех таблиц ивьюшекАтрибуты • className • dbName • dbVersion
  9. 9. @TableДефайним таблицу• @Column – type [INTEGER, REAL, TEXT, BLOB] – defVal• @Autoincrement• @NotNull• @PrimaryKey• @Unique[ROLLBACK, ABORT, FAIL, IGNORE, REPLACE]
  10. 10. @IndexСоздаем индекс для таблички. Будет созданиндекс с именем idx_<name>Атрибуты• name• columns
  11. 11. @PrimaryKeyСоздаем составной Primary Key для таблицыАтрибуты• collumns
  12. 12. @SimpleViewСоздаем view для выборки данных из несколькихтаблиц/viewСтолбцы создаются с именем <alias>_<column>Атрибуты• value – имя view
  13. 13. Дефайним вьюшку• @From• @ Join – joinTable – таблица которую присоединяем – joinColumn – onTableAlias – алиас таблицы к которой присоединяем – onColumn – type [INNER, LEFT, RIGHT, CROSS]• @RawJoin – joinTable – таблица переменной – onCondition – raw sql вашего условия – type [INNER, LEFT, RIGHT, CROSS]• @Columns - что выбираем• @IgnoreColumns – ничего не выбираем
  14. 14. @RawQueryСоздаем sql запрос который будет выполняться вcontent provider.Как и view только с параметрамиАтрибуты• value – имя запросаПлюшки• @SqlQuery
  15. 15. Валидация схемы• Таблица без столбцов• Более одного PrimaryKey для таблицы• Индекс не содержит полей• Дублирующиеся названия таблиц/вьюшек• Существование @From во вьюшке• Существование колонок в таблицах/view @From/@Join• Дублирующиеся alias во view
  16. 16. • Пустое название таблицы/столбца/индекса/вьюшки• Индекс можно определить только для таблицы
  17. 17. #2 Content ProviderСоздаем полноценный провайдер с помощьюнескольких строк при этом сохраняем human styleПоддерживает:• no-notify• limit• alternative notify uri• bulkInsert• triggers
  18. 18. Аннотации• @Provider• @URI• @Trigger• @Triggers
  19. 19. @ProviderАтрибуты:• name• schemaClass• authority• openHelperClass
  20. 20. @URI• type [DIR, ITEM, DIR_AND_ITEM]• сolumn – по умолчанию _id• altNotify• onlyQuery – по умолчанию falseвсе опционально
  21. 21. @ 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){}
  22. 22. Human Style
  23. 23. Вопросы?
  1. A particular slide catching your eye?

    Clipping is a handy way to collect important slides you want to go back to later.

×