Как вы понимаете, мы имеем самое непосредственное отношение к разработке приложений для Android, ведь именно эта ОС установлена на YotaPhone. И этим постом мы открываем серию публикаций, в которых будем освещать различные аспекты разработки приложений под Android, делиться опытом, как своим, так и других специалистов. Кстати, некоторое время назад мы уже писали об SDK и особенностях архитектуры YotaPhone, что тоже отчасти перекликается с темой данной публикации: полностью разработанная нами SDK построена по принципам, аналогичным стандартной SDK для Android, чтобы дать разработчикам интуитивно понятные инструменты.
Если вы разрабатываете приложения под Android, то вам, скорее всего, нужно где-то хранить данные. Вы можете выбрать один из облачных сервисов (в этом случае удобно пользоваться SyncAdapter) или воспользоваться встроенной SQLite-базой данных. Во втором случае вам придётся выбрать между записью SQL-запросов с помощью Content Provider (если вы планируете использовать данные несколькими приложениями) или ORM.
В этом посте мы рассмотрим некоторые из Android ORM, которые вы можете использовать в своих приложениях.
OrmLite
Пожалуй, это первый ORM, который приходит в голову. Однако это не Android ORM, а Java ORM с поддержкой SQL-баз. Его можно использовать везде, где применяется Java, например, в JDBC-соединениях, Spring и — Android.
Здесь активно используются аннотации, например, @DatabaseTable
для каждого класса, определяющего таблицу, а @DatabaseField
— для каждого поля в классе.
Простой пример использования OrmLite для определения таблицы:
@DatabaseTable(tableName = "users")
public class User {
@DatabaseField(id = true)
private String username;
@DatabaseField
private String password;
public User() {
// ORMLite needs a no-arg constructor
}
public User(String username, String password) {
this.username = username;
this.password = password;
}
// Implementing getter and setter methods
public String getUserame() {
return this.username;
}
public void setName(String username) {
this.username = username;
}
public String getPassword() {
return this.password;
}
public void setPassword(String password) {
this.password = password;
}
}
Это open source-проект, вы можете найти его на GitHub. За более подробной информацией можно обратиться к официальной документации.
SugarORM
Этот ORM создавался именно для Android. В комплекте поставляется API, который легко изучить и запомнить. Он может сам создавать необходимые таблицы и содержит простые методы формирования связей по типу «один-с-одним» и «один-со-многими». Также SugarORM облегчает операции создания, чтения, обновления и удаления (CRUD) с помощью всего лишь трёх функций: save()
, delete()
и find()
(или findById()
).
Чтобы использовать SugarORM в вашем приложении, нужно в AndroidManifest.xml
добавить четыре тэга meta-data
:
<meta-data android:name="DATABASE" android:value="my_database.db" />
<meta-data android:name="VERSION" android:value="1" />
<meta-data android:name="QUERY_LOG" android:value="true" />
<meta-data android:name="DOMAIN_PACKAGE_NAME" android:value="com.my-domain" />
Теперь можно использовать этот ORM в классах, которые вы хотите превратить в таблицы:
public class User extends SugarRecord<User> {
String username;
String password;
int age;
@Ignore
String bio; //this will be ignored by SugarORM
public User() { }
public User(String username, String password,int age){
this.username = username;
this.password = password;
this.age = age;
}
}
Добавление нового пользователя:
User johndoe = new User(getContext(),"john.doe","secret",19);
johndoe.save(); //stores the new user into the database
Удаление всех пользователей в возрасте 19 лет:
List<User> nineteens = User.find(User.class,"age = ?",new int[]{19});
foreach(user in nineteens) {
user.delete();
}
Подробнее изучить возможности SugarORM можно в его документации.
GreenDAO
Если вам необходима высокая производительность, то обязательно присмотритесь к GreenDAO. Как сказано на их сайте, «большинство сущностей может быть добавлено, обновлено или загружено с производительностью несколько тысяч операций в секунду». И если бы авторы лукавили относительно возможностей своего детища, то оно вряд ли было бы использовано в этих всем известных приложениях. По сравнению с тем же OrmLite, GreenDAO почти в 4,5 раза быстрее:
По размеру он меньше всего на 100 Кб, что не имеет особого значения.
Посмотреть примеры использования GreenDAO можно в туториале, использующем Android Studio. Также желающие могут ознакомиться с кодом проекта на GitHub и изучить документацию.
ActiveAndroid
Как и многие другие ORM, ActiveAndroid помогает хранить и извлекать записи из SQLite без создания SQL-запросов.
Для использования ActiveAndroid нужно добавить jar-файл в папку /libs
. Как сказано в начальной инструкции, нужно скопировать исходный код с GitHub и скомпилировать с помощью Maven. После подключения ActiveAndroid к вашему проекту, добавьте в AndroidManifest.xml
тэги meta-data
:
<meta-data android:name="AA_DB_NAME" android:value="my_database.db" />
<meta-data android:name="AA_DB_VERSION" android:value="1" />
После этого можно при необходимости вызывать ActiveAndroid.initialize()
:
public class MyActivity extends Activity {
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
ActiveAndroid.initialize(this);
//rest of the app
}
}
Теперь вы можете, используя аннотации, создавать модели как Java-классы:
@Table(name = "User")
public class User extends Model {
@Column(name = "username")
public String username;
@Column(name = "password")
public String password;
public User() {
super();
}
public User(String username,String password) {
super();
this.username = username;
this.password = password;
}
}
Это простой пример использования ActiveAndroid, для более сложных способов применения изучите документацию проекта.
Realm
Последний ORM в нашем обзоре, Realm написан на С++ и запускается прямо на вашем устройстве (без интерпретации), что обеспечивает очень высокую производительность. Код версии для iOS, если это кому интересно, можно найти на GitHub. Также на офсайте вы можете найти примеры использования Realm на языках Objective-C и Swift.
Заключение
Конечно, это далеко не единственные ORM, существующие в природе. За рамками данного обзор остались, например, Androrm и ORMDroid. Несомненно, каждый разработчик должен уметь работать с SQL, но создание запросов — занятие скучное и ленивое, так почему бы не использовать для автоматизации процесса один из множества готовых ORM? Они могут существенно упростить вашу работу.
Автор: YotaDevices