SlideShare une entreprise Scribd logo
1  sur  31
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
Создаем полноценный провайдер с помощью
нескольких строк при этом сохраняем 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
Вопросы?

Contenu connexe

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

Доклад Сергея Аверина на CodeFest-2013. "MySQL+HandlerSocket=NoSQL".
Доклад Сергея Аверина на CodeFest-2013. "MySQL+HandlerSocket=NoSQL".Доклад Сергея Аверина на CodeFest-2013. "MySQL+HandlerSocket=NoSQL".
Доклад Сергея Аверина на CodeFest-2013. "MySQL+HandlerSocket=NoSQL".
Badoo Development
 
PG Day'14 Russia, PostgreSQL как платформа для разработки приложений, часть 2...
PG Day'14 Russia, PostgreSQL как платформа для разработки приложений, часть 2...PG Day'14 Russia, PostgreSQL как платформа для разработки приложений, часть 2...
PG Day'14 Russia, PostgreSQL как платформа для разработки приложений, часть 2...
pgdayrussia
 
Aleksey Yeschenko "Моделирование данных с помощью CQL3". Выступление на Cassa...
Aleksey Yeschenko "Моделирование данных с помощью CQL3". Выступление на Cassa...Aleksey Yeschenko "Моделирование данных с помощью CQL3". Выступление на Cassa...
Aleksey Yeschenko "Моделирование данных с помощью CQL3". Выступление на Cassa...
it-people
 
Основы индексирования и расширенные возможности EXPLAIN в MySQL / Василий Лук...
Основы индексирования и расширенные возможности EXPLAIN в MySQL / Василий Лук...Основы индексирования и расширенные возможности EXPLAIN в MySQL / Василий Лук...
Основы индексирования и расширенные возможности EXPLAIN в MySQL / Василий Лук...
Ontico
 
2014.12.23 Александр Андреев, Parallels
2014.12.23 Александр Андреев, Parallels2014.12.23 Александр Андреев, Parallels
2014.12.23 Александр Андреев, Parallels
Nikolay Samokhvalov
 
СУБД 2013 Лекция №7 "Оптимизация запросов и индексирование"
СУБД 2013 Лекция №7 "Оптимизация запросов и индексирование"СУБД 2013 Лекция №7 "Оптимизация запросов и индексирование"
СУБД 2013 Лекция №7 "Оптимизация запросов и индексирование"
Technopark
 
Асинхронная репликация без цензуры: архитектурные проблемы MySQL, или почему ...
Асинхронная репликация без цензуры: архитектурные проблемы MySQL, или почему ...Асинхронная репликация без цензуры: архитектурные проблемы MySQL, или почему ...
Асинхронная репликация без цензуры: архитектурные проблемы MySQL, или почему ...
Oleg Tsarev
 
CodeFest 2013. Аверин С. — MySQL+HandlerSocket=NoSQL
CodeFest 2013. Аверин С. — MySQL+HandlerSocket=NoSQLCodeFest 2013. Аверин С. — MySQL+HandlerSocket=NoSQL
CodeFest 2013. Аверин С. — MySQL+HandlerSocket=NoSQL
CodeFest
 
0044
00440044
0044
JIuc
 

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

Доклад Сергея Аверина на CodeFest-2013. "MySQL+HandlerSocket=NoSQL".
Доклад Сергея Аверина на CodeFest-2013. "MySQL+HandlerSocket=NoSQL".Доклад Сергея Аверина на CodeFest-2013. "MySQL+HandlerSocket=NoSQL".
Доклад Сергея Аверина на CodeFest-2013. "MySQL+HandlerSocket=NoSQL".
 
Основные команды языка SQL
Основные команды языка SQLОсновные команды языка SQL
Основные команды языка SQL
 
Сергей Аверин, То, что вы хотели знать о HandlerSocket, но не смогли нагуглить
Сергей Аверин, То, что вы хотели знать о HandlerSocket, но не смогли нагуглитьСергей Аверин, То, что вы хотели знать о HandlerSocket, но не смогли нагуглить
Сергей Аверин, То, что вы хотели знать о HandlerSocket, но не смогли нагуглить
 
PG Day'14 Russia, PostgreSQL как платформа для разработки приложений, часть 2...
PG Day'14 Russia, PostgreSQL как платформа для разработки приложений, часть 2...PG Day'14 Russia, PostgreSQL как платформа для разработки приложений, часть 2...
PG Day'14 Russia, PostgreSQL как платформа для разработки приложений, часть 2...
 
Aleksey Yeschenko "Моделирование данных с помощью CQL3". Выступление на Cassa...
Aleksey Yeschenko "Моделирование данных с помощью CQL3". Выступление на Cassa...Aleksey Yeschenko "Моделирование данных с помощью CQL3". Выступление на Cassa...
Aleksey Yeschenko "Моделирование данных с помощью CQL3". Выступление на Cassa...
 
Основы индексирования и расширенные возможности EXPLAIN в MySQL / Василий Лук...
Основы индексирования и расширенные возможности EXPLAIN в MySQL / Василий Лук...Основы индексирования и расширенные возможности EXPLAIN в MySQL / Василий Лук...
Основы индексирования и расширенные возможности EXPLAIN в MySQL / Василий Лук...
 
Все самые важные команды SQL за 60 минут
Все самые важные команды SQL за 60 минутВсе самые важные команды SQL за 60 минут
Все самые важные команды SQL за 60 минут
 
SPA инструменты
SPA инструментыSPA инструменты
SPA инструменты
 
2014.12.23 Александр Андреев, Parallels
2014.12.23 Александр Андреев, Parallels2014.12.23 Александр Андреев, Parallels
2014.12.23 Александр Андреев, Parallels
 
Базы данных лекция №7
Базы данных лекция №7Базы данных лекция №7
Базы данных лекция №7
 
СУБД 2013 Лекция №7 "Оптимизация запросов и индексирование"
СУБД 2013 Лекция №7 "Оптимизация запросов и индексирование"СУБД 2013 Лекция №7 "Оптимизация запросов и индексирование"
СУБД 2013 Лекция №7 "Оптимизация запросов и индексирование"
 
Корпоративное приложение на Rails
Корпоративное приложение на RailsКорпоративное приложение на Rails
Корпоративное приложение на Rails
 
Асинхронная репликация без цензуры, Олег Царёв (Mail.ru Group)
Асинхронная репликация без цензуры, Олег Царёв (Mail.ru Group)Асинхронная репликация без цензуры, Олег Царёв (Mail.ru Group)
Асинхронная репликация без цензуры, Олег Царёв (Mail.ru Group)
 
СУБД 2013 Лекция №5 "Определение узких мест"
СУБД 2013 Лекция №5 "Определение узких мест"СУБД 2013 Лекция №5 "Определение узких мест"
СУБД 2013 Лекция №5 "Определение узких мест"
 
разработка бизнес приложений (7)
разработка бизнес приложений (7)разработка бизнес приложений (7)
разработка бизнес приложений (7)
 
Управление данными (sql)
Управление данными (sql)Управление данными (sql)
Управление данными (sql)
 
14 - Базы данных. Основные объекты базы данных и язык SQL
14 - Базы данных. Основные объекты базы данных и язык SQL14 - Базы данных. Основные объекты базы данных и язык SQL
14 - Базы данных. Основные объекты базы данных и язык SQL
 
Асинхронная репликация без цензуры: архитектурные проблемы MySQL, или почему ...
Асинхронная репликация без цензуры: архитектурные проблемы MySQL, или почему ...Асинхронная репликация без цензуры: архитектурные проблемы MySQL, или почему ...
Асинхронная репликация без цензуры: архитектурные проблемы MySQL, или почему ...
 
CodeFest 2013. Аверин С. — MySQL+HandlerSocket=NoSQL
CodeFest 2013. Аверин С. — MySQL+HandlerSocket=NoSQLCodeFest 2013. Аверин С. — MySQL+HandlerSocket=NoSQL
CodeFest 2013. Аверин С. — MySQL+HandlerSocket=NoSQL
 
0044
00440044
0044
 

Plus de Alex Tumanoff

Navigation map factory by Alexey Klimenko
Navigation map factory by Alexey KlimenkoNavigation map factory by Alexey Klimenko
Navigation map factory by Alexey Klimenko
Alex Tumanoff
 
Serialization and performance by Sergey Morenets
Serialization and performance by Sergey MorenetsSerialization and performance by Sergey Morenets
Serialization and performance by Sergey Morenets
Alex Tumanoff
 
Async clinic by by Sergey Teplyakov
Async clinic by by Sergey TeplyakovAsync clinic by by Sergey Teplyakov
Async clinic by by Sergey Teplyakov
Alex Tumanoff
 
Deep Dive C# by Sergey Teplyakov
Deep Dive  C# by Sergey TeplyakovDeep Dive  C# by Sergey Teplyakov
Deep Dive C# by Sergey Teplyakov
Alex Tumanoff
 
Bdd by Dmitri Aizenberg
Bdd by Dmitri AizenbergBdd by Dmitri Aizenberg
Bdd by Dmitri Aizenberg
Alex Tumanoff
 
Разработка расширений Firefox
Разработка расширений FirefoxРазработка расширений Firefox
Разработка расширений Firefox
Alex Tumanoff
 

Plus de Alex Tumanoff (20)

Sql server 2019 New Features by Yevhen Nedaskivskyi
Sql server 2019 New Features by Yevhen NedaskivskyiSql server 2019 New Features by Yevhen Nedaskivskyi
Sql server 2019 New Features by Yevhen Nedaskivskyi
 
Odessa .net-user-group-sql-server-2019-hidden-gems by Denis Reznik
Odessa .net-user-group-sql-server-2019-hidden-gems by Denis ReznikOdessa .net-user-group-sql-server-2019-hidden-gems by Denis Reznik
Odessa .net-user-group-sql-server-2019-hidden-gems by Denis Reznik
 
Azure data bricks by Eugene Polonichko
Azure data bricks by Eugene PolonichkoAzure data bricks by Eugene Polonichko
Azure data bricks by Eugene Polonichko
 
Sdlc by Anatoliy Anthony Cox
Sdlc by  Anatoliy Anthony CoxSdlc by  Anatoliy Anthony Cox
Sdlc by Anatoliy Anthony Cox
 
Kostenko ux november-2014_1
Kostenko ux november-2014_1Kostenko ux november-2014_1
Kostenko ux november-2014_1
 
Java 8 in action.jinq.v.1.3
Java 8 in action.jinq.v.1.3Java 8 in action.jinq.v.1.3
Java 8 in action.jinq.v.1.3
 
"Drools: декларативная бизнес-логика в Java-приложениях" by Дмитрий Контрерас...
"Drools: декларативная бизнес-логика в Java-приложениях" by Дмитрий Контрерас..."Drools: декларативная бизнес-логика в Java-приложениях" by Дмитрий Контрерас...
"Drools: декларативная бизнес-логика в Java-приложениях" by Дмитрий Контрерас...
 
Spring.new hope.1.3
Spring.new hope.1.3Spring.new hope.1.3
Spring.new hope.1.3
 
Sql saturday azure storage by Anton Vidishchev
Sql saturday azure storage by Anton VidishchevSql saturday azure storage by Anton Vidishchev
Sql saturday azure storage by Anton Vidishchev
 
Navigation map factory by Alexey Klimenko
Navigation map factory by Alexey KlimenkoNavigation map factory by Alexey Klimenko
Navigation map factory by Alexey Klimenko
 
Serialization and performance by Sergey Morenets
Serialization and performance by Sergey MorenetsSerialization and performance by Sergey Morenets
Serialization and performance by Sergey Morenets
 
Игры для мобильных платформ by Алексей Рыбаков
Игры для мобильных платформ by Алексей РыбаковИгры для мобильных платформ by Алексей Рыбаков
Игры для мобильных платформ by Алексей Рыбаков
 
Android sync adapter
Android sync adapterAndroid sync adapter
Android sync adapter
 
Async clinic by by Sergey Teplyakov
Async clinic by by Sergey TeplyakovAsync clinic by by Sergey Teplyakov
Async clinic by by Sergey Teplyakov
 
Deep Dive C# by Sergey Teplyakov
Deep Dive  C# by Sergey TeplyakovDeep Dive  C# by Sergey Teplyakov
Deep Dive C# by Sergey Teplyakov
 
Bdd by Dmitri Aizenberg
Bdd by Dmitri AizenbergBdd by Dmitri Aizenberg
Bdd by Dmitri Aizenberg
 
Неформальные размышления о сертификации в IT
Неформальные размышления о сертификации в ITНеформальные размышления о сертификации в IT
Неформальные размышления о сертификации в IT
 
Разработка расширений Firefox
Разработка расширений FirefoxРазработка расширений Firefox
Разработка расширений Firefox
 
Patterns of parallel programming
Patterns of parallel programmingPatterns of parallel programming
Patterns of parallel programming
 
Lambda выражения и Java 8
Lambda выражения и Java 8Lambda выражения и Java 8
Lambda выражения и Java 8
 

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

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