1 В избранное 0 Ответвления 0

OSCHINA-MIRROR/jamling-Android-ORM

Присоединиться к Gitlife
Откройте для себя и примите участие в публичных проектах с открытым исходным кодом с участием более 10 миллионов разработчиков. Приватные репозитории также полностью бесплатны :)
Присоединиться бесплатно
Клонировать/Скачать
README_zh.md 8.5 КБ
Копировать Редактировать Web IDE Исходные данные Просмотреть построчно История
gitlife-traslator Отправлено 28.11.2024 22:20 0927f04

Введение

Вы используете sqlite для хранения данных вашего приложения на Android? Если да, то вы, возможно, считаете работу с sqlite на Android немного сложной. Я занимаюсь разработкой под Android с 2010 года и считаю, что работа с базами данных на этой платформе всё ещё довольно сложна, особенно в плане удобства сопровождения и расширяемости.

Именно с этого момента я решил создать ORM-фреймворк для Android, похожий на Hibernate, чтобы упростить разработку. Разработчикам больше не нужно заботиться о низкоуровневой реализации базы данных, они могут сосредоточиться на бизнес-логике верхнего уровня.

Если вам интересен этот проект, присоединяйтесь!

Особенности

  • Простота конфигурации ORM: достаточно добавить аннотацию @Column к свойствам Java Bean, чтобы выполнить сопоставление с полями базы данных.
  • Поддержка нативного ContentProvider: можно легко использовать механизм Android ContentProvider для совместного использования данных и инициализации/обновления/понижения версии базы данных.
  • Мощная поддержка разработки: есть плагины Eclipse Android ADT-extensions и Android Studio Android ORM Tool для автоматической генерации DDL и ContentProvider.
  • Эффективные вспомогательные инструменты: мастер для создания Activity, Service и BroadcastReceiver с автоматической конфигурацией в AndroidManifest.xml.
  • ...

Дополнительные функции доступны для самостоятельного изучения.

Использование

Последняя версия $latest доступна по ссылке: latest release. При использовании замените $latest на конкретную версию.

Eclipse

Скачайте aorm-core-$latest.jar и поместите его в каталог libs/. Рекомендуется установить плагин Android ADT-extensions.

Android Studio

Aorm уже опубликован на jcenter. Добавьте следующую зависимость в ваш app/build.gradle:

dependencies {
    compile 'cn.ieclipse.aorm:aorm-core:$latest'
}

Рекомендуется установить плагин Android Studio Android ORM Tool, который позволяет быстро генерировать соответствующий код.

Сравнение с аналогичными библиотеками ORM

Результаты простого теста:

Simple Trial

Результаты сложного теста:

Complex Trial

Код тестового проекта доступен по ссылке: https://github.com/Raizlabs/AndroidDatabaseLibraryComparison

Пример кода

Создание отображения

Добавьте аннотации @Table и @Column к классу, чтобы сопоставить таблицу и поля.

@Table(name = "student")
public class Student implements Serializable {

    @Column(name = "_id", id = true)
    public long id; //id is Primary key.

    @Column(name="_name")
    public String name; //mapping to _name and auto column type

    @Column()
    public int age; //auto column type and name

    @Column(defaultValue="''")
    public String phone; // default value in empty

    public String address; // no mapping
}

Create database

package cn.ieclipse.aorm.example;

import android.content.ContentProvider;
import android.content.ContentValues;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteOpenHelper;
import android.net.Uri;
import cn.ieclipse.aorm.Aorm;
import cn.ieclipse.aorm.Session;
import cn.ieclipse.aorm.example.bean.Course;
import cn.ieclipse.aorm.example.bean.Grade;
import cn.ieclipse.aorm.example.bean.Student;

/**
 * @author Jamling
 * 
 */
public class ExampleContentProvider extends ContentProvider {
    
    public static final String AUTH = "cn.ieclipse.aorm.example.provider";
    public static final Uri URI = Uri.parse("content://" + AUTH);
    private SQLiteOpenHelper mOpenHelper;
    private static Session session;
    
    @Override
    public int delete(Uri arg0, String arg1, String[] arg2) {
        return 0;
    }
    
    @Override
    public String getType(Uri arg0) {
        return null;
    }
    
    @Override
    public Uri insert(Uri arg0, ContentValues arg1) {
        return null;
    }
    
    @Override
    public Cursor query(Uri arg0, String[] arg1, String arg2, String[] arg3,
            String arg4) {
        return null;
    }
    
    @Override
    public int update(Uri arg0, ContentValues arg1, String arg2, String[] arg3) {
        return 0;
    }
    
    public static Session getSession() {
        return session;
    }
    
    @Override
    public boolean onCreate() {
        mOpenHelper = new SQLiteOpenHelper(this.getContext(), "example.db",
                null, 1) {
            public void onCreate(SQLiteDatabase db) {
                // method 3: use AORM to create table
``` ```
Aorm.createTable(db, Grade.class);
Aorm.createTable(db, Student.class);
Aorm.createTable(db, Course.class);  
}

public void onUpgrade(SQLiteDatabase db, int oldVersion,
        int newVersion) {
    // update table, suggested to wrapper in if block
    Aorm.updateTable(db, Grade.class);
    Aorm.updateTable(db, Student.class);
    Aorm.updateTable(db, Course.class);
}
};
session = new Session(mOpenHelper, getContext().getContentResolver());
return true;
}

Запрос

Session session = ExampleContentProvider.getSession();
// 最简单的查询:查询所有的学生信息.
Criteria criteria = Criteria.create(Student.class);
// 添加条件: id相等
criteria.add(Restrictions.eq("id", 1));
// 添加条件: name like Jamling
criteria.add(Restrictions.like("name", "Jaming"));
// add restriction: age < 30
criteria.add(Restrictions.lt("age", 30));
// add order
criteria.addOrder(Order.asc("age"));
// set district
criteria.setDistinct(true);
// set limit from row 10 to 20
criteria.setLimit(10, 10);

List<Student> list = session.list(Student.class);
// if you use Android CursorAdapter you can:
Cursor c = session.query(criteria);

// set alias, so the project will be alias.columnn. e.g. s.name
// criteria.setAlias("s");
// multi-table query
criteria.addChild(StudentMore.class, "m", Criteria.INNER_JOIN,
            Restrictions.geProperty("s.id", "m.id"));
// query to cursor
c = session.query(criteria);
// convert to list.
List<Object[]> ret = CursorUtils.getFromCursor(c,
        new Class[] { Student.class }, new String[] { "s", "m" });
// query to list.
ret = session.listAll(criteria);
Object[] item = ret.get(0);
Student s = (Student) item[0];
StudentMore m = (StudentMore) item[1];
//

Другие операции

Session session = ExampleContentProvider.getSession();
// insert
Student s = new Student();
s.setName("Jamling");
long rowId = session.insert(s, null);
// update student's name to Jame whose id is 1
s.setId(1);
s.setName("Jame");
int rows = session.update(s);
// delete student whose id is 2
session.deleteById(Student.class, 2);
// query student whose id is 4
s = session.get(Student.class, 4);

Документ

Пожалуйста, обратитесь к http://www.ieclipse.cn/p/Android-ORM/userguide.html

Автор

Jamling (li.jamling@gmail.com)

Опубликовать ( 0 )

Вы можете оставить комментарий после Вход в систему

1
https://api.gitlife.ru/oschina-mirror/jamling-Android-ORM.git
git@api.gitlife.ru:oschina-mirror/jamling-Android-ORM.git
oschina-mirror
jamling-Android-ORM
jamling-Android-ORM
master