- PVSM.RU - https://www.pvsm.ru -

5 лучших ORM для Android

5 лучших ORM для Android

Как вы понимаете, мы имеем самое непосредственное отношение к разработке приложений для Android, ведь именно эта ОС установлена на YotaPhone. И этим постом мы открываем серию публикаций, в которых будем освещать различные аспекты разработки приложений под Android, делиться опытом, как своим, так и других специалистов. Кстати, некоторое время назад мы уже писали об SDK и особенностях архитектуры YotaPhone, что тоже отчасти перекликается с темой данной публикации: полностью разработанная нами SDK построена по принципам, аналогичным стандартной SDK для Android, чтобы дать разработчикам интуитивно понятные инструменты.

Если вы разрабатываете приложения под Android, то вам, скорее всего, нужно где-то хранить данные. Вы можете выбрать один из облачных сервисов (в этом случае удобно пользоваться SyncAdapter [1]) или воспользоваться встроенной SQLite-базой данных. Во втором случае вам придётся выбрать между записью SQL-запросов с помощью Content Provider (если вы планируете использовать данные несколькими приложениями) или ORM [2].

В этом посте мы рассмотрим некоторые из Android ORM, которые вы можете использовать в своих приложениях.

OrmLite

Пожалуй, это первый ORM [3], который приходит в голову. Однако это не Android ORM, а Java ORM с поддержкой SQL-баз. Его можно использовать везде, где применяется Java, например, в JDBC-соединениях [4], Spring [5]и — 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 [6]. За более подробной информацией можно обратиться к официальной документации [7].

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 можно в его документации [8].

GreenDAO

Если вам необходима высокая производительность, то обязательно присмотритесь к GreenDAO [9]. Как сказано на их сайте, «большинство сущностей может быть добавлено, обновлено или загружено с производительностью несколько тысяч операций в секунду [10]». И если бы авторы лукавили относительно возможностей своего детища, то оно вряд ли было бы использовано в этих всем известных приложениях [11]. По сравнению с тем же OrmLite, GreenDAO почти в 4,5 раза быстрее:

5 лучших ORM для Android

По размеру он меньше всего на 100 Кб, что не имеет особого значения.
Посмотреть примеры использования GreenDAO можно в туториале [12], использующем Android Studio. Также желающие могут ознакомиться с кодом проекта на GitHub [13]и изучить документацию [14].

ActiveAndroid

Как и многие другие ORM, ActiveAndroid [15]помогает хранить и извлекать записи из SQLite без создания SQL-запросов.

Для использования ActiveAndroid нужно добавить jar-файл в папку /libs. Как сказано в начальной инструкции [16], нужно скопировать исходный код с GitHub [17]и скомпилировать с помощью Maven [18]. После подключения 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, для более сложных способов применения изучите документацию [15]проекта.

Realm

Последний ORM в нашем обзоре, Realm [19]написан на С++ и запускается прямо на вашем устройстве (без интерпретации), что обеспечивает очень высокую производительность. Код версии для iOS, если это кому интересно, можно найти на GitHub [20]. Также на офсайте вы можете найти примеры использования Realm на языках Objective-C и Swift.

Заключение

Конечно, это далеко не единственные ORM, существующие в природе. За рамками данного обзор остались, например, Androrm [21]и ORMDroid [22]. Несомненно, каждый разработчик должен уметь работать с SQL, но создание запросов — занятие скучное и ленивое, так почему бы не использовать для автоматизации процесса один из множества готовых ORM? Они могут существенно упростить вашу работу.

Автор: YotaDevices

Источник [23]


Сайт-источник PVSM.RU: https://www.pvsm.ru

Путь до страницы источника: https://www.pvsm.ru/orm/73821

Ссылки в тексте:

[1] SyncAdapter: http://developer.android.com/reference/android/content/AbstractThreadedSyncAdapter.html

[2] ORM: http://ru.wikipedia.org/wiki/ORM

[3] ORM: http://ormlite.com/sqlite_java_android_orm.shtml

[4] JDBC-соединениях: http://www.oracle.com/technetwork/java/javase/jdbc/index.html

[5] Spring : http://spring.io/

[6] GitHub: https://github.com/j256/ormlite-android

[7] документации: http://ormlite.com/javadoc/ormlite-core/doc-files/ormlite.html

[8] документации: http://satyan.github.io/sugar/getting-started.html

[9] GreenDAO: http://greendao-orm.com/

[10] несколько тысяч операций в секунду: http://greendao-orm.com/2011/10/23/current-performance-figures/

[11] известных приложениях: http://www.appbrain.com/stats/libraries/details/greendao/greendao

[12] туториале: http://blog.surecase.eu/using-greendao-with-android-studio-ide/

[13] GitHub : https://github.com/greenrobot/greenDAO

[14] документацию: http://greendao-orm.com/documentation/

[15] ActiveAndroid : http://www.activeandroid.com/

[16] начальной инструкции: https://github.com/pardom/ActiveAndroid/wiki/Getting-started

[17] GitHub : https://github.com/pardom/ActiveAndroid

[18] Maven: http://maven.apache.org/

[19] Realm : http://realm.io/

[20] GitHub: https://github.com/realm/realm-cocoa

[21] Androrm : http://www.androrm.com/

[22] ORMDroid: https://github.com/roscopeco/ormdroid

[23] Источник: http://habrahabr.ru/post/242559/