Active Android ORM

Tutorial de como instalar y usar Active android ORM; este tutorial va dirigido para quienes ya no pueden mas con el hecho de tener de lidiar directamente con SQLite en android, la cual no es nada grato que en el 2015 tener que estar trabajando con un iterator.

Active ORM

Active android es un ORM simple para android el cual como todos los ORM nos abstraer de la logica de persistencia, en este caso especifico SQLite.

Para instalarlo se puede hacer de varias formas:

Si estas usando eclipse tendras que:

Descargar el projecto
Entrar por linea de comando y crear el jar con apache ant.
Luego agregar dicho jar a nuestro build path de eclipse

Si están usando android studio incluir esto en nuestro build.gradle:

repositories {
    mavenCentral()
    maven { url "https://oss.sonatype.org/content/repositories/snapshots/" }
}

compile 'com.michaelpardo:activeandroid:3.1.0-SNAPSHOT'

Una vez instalado tenemos que agregar varias configuraciones a nuestro archivo manifest


<manifest ...>
    <application android:name="com.activeandroid.app.Application" ...>

        ...

        <meta-data android:name="AA_DB_NAME" android:value="nombre_db.db" />
        <meta-data android:name="AA_DB_VERSION" android:value="1" />

    </application>
</manifest>

Eso se puede quedar asi, pero en caso de que tengamos nuestra propia clase que extienda de Application tendremos que inicializar ActiveAndroid directamente y extender de com.activeandroid.app.Applicationn.


public class OurApplicationName extends com.activeandroid.app.Application {

    @Override
    public void onCreate() {
        super.onCreate();
        ActiveAndroid.initialize(this);
    }

    @Override
    public void onTerminate() {
        ActiveAndroid.dispose();
    }
}

Una vez todo instalado podemos pasar a crear nuestras entidades.

Para crear una tabla en sqlite tenemos que crear una una clase y hacerla que extienda de Model que es una clase que no provee esta libreria que contiene los metodos para hacer query y/o otras funcionalidades genericas para cada modelo. Aparte de extender de model tenemos tambien que anotar nuestra clase con la anotación @Table y aqui es donde en caso de querer un nombre distinto a nuestra tabla o un identificador unico diferente al que ellos nos proporcionan que es id.

@Table(name="nombre_tabla",id = "id")
public class ModelClass extends Model {

    @Column(unique = true,index = true)
    public long columnName;

    @Column
    public String columnName1;

}

Para crear una columna en base de datos tenemos que a nuestras propiedades anotarlas con la anotación @Column la cual puede tener tambien mas atributos como unique, index y demás otras propiedades. Mas Información.

Para poder guardar insertar registro en nuestra base de datos basta con instanciar uno de nuestros modelos y llamar el metodo save del mismo.

    ModelClass item = new ModelClass();

   long itemId = item.save();

Automaticamente llamemos el metodo de guardar este nos retornara el identificador de nuestro elemento guardado en caso contrario lanzara una excepción.

Para poder obtener registros de nuestra base de datos tenemos que crear un query con la clase Select de nuestra libreria.


   #ejecutara el query y retornara una lista de elementos
   List<ModelClass> items = new Select().from(ModelClass.class).execute();

   //Ejecutara un query y retornara un solo elemento
   ModelClass item = new Select().from(ModelClass.class).executeSingle();

En caso que queramos condicionar nuestro query la libreria no proporciona metodos para los fines

.where(«column > 1»)

.and(«column < 3") .limit() .count() Entre otras funciones mas que posee la libreria, no croe que tenga que explicar que hacen cada una de esas. Active android soporta tambien relaciones One-To-Many tan facil como anotar una propiedad con la anotación @Column y dicha propiedad ser una referencia a otra clase que extienda de model.


Class Table1 extends Model{
    
    @Column
    public String columnName;

    @Column 
    public Table2 columnName2;

}

Class Table2 extends Model{
    @Column 
    public String columnName;

    @Column
    public String columnName2
}

En caso de que queramos todos los hijos de un entidad podriamos tener un metodo como este:

@Table(name = "Categories")
public class ModelClass2 extends Model {
    public List<ModelClass1> items() {
        return getMany(ModelClass1.class, "ModelClass1");
    }
}

Loa invito a que prueben esta libreria y la usen en sus projectos. Este projecto tiene mas de 8 meses sin un commit lo que me resulta raro, pero para los usos que se le da a SQLite sobre android esta mas que a la medida esta libreria.

Referencia

Projecto en GTIHUB

Paginas de referencia