Android almacenamiento persistente (4) el uso de greenDAO

1. Antecedentes

En el último blog, podemos sentir el uso de SQLite. Aunque Android ha simplificado algunas operaciones de SQLite y ha proporcionado una API más conveniente, los desarrolladores aún necesitan escribir algún lenguaje SQL en uso. Es simple pero no simple. Solo quiero almacenar algunos datos simples, pero se necesita mucho esfuerzo para desarrollar la interfaz. Por supuesto, se puede decir que no es suficiente para que otro programador desarrolle la interfaz de operación de la base de datos. Su jefe ciertamente no está de acuerdo. Todavía se necesita encontrar un trabajo tan simple. Otros, originalmente querías que usaras una persona como dos personas ¿Todavía quieres dos trabajos para un trabajo? ! ? Si le preocupa este asunto, eche un vistazo a greenDAO que se presentará hoy.

2. ¿Qué es GreenDAO?

greenDAO web oficial de greenDAO introducción del reloj de puntos de dolor desarrollador - librarse de la pesadilla de escribir SQL! Si crees que este eslogan no es muy claro, puedes echar un vistazo a la introducción detallada:

greenDAO es un ORM Android de código abierto que hace que el desarrollo de bases de datos SQLite sea más interesante. Ahorra a los desarrolladores quedar atrapados en el lodo de tratar con bases de datos de bajo nivel, ahorrando tiempo de desarrollo. SQLite es una excelente base de datos relacional incrustada, sin embargo, escribir SQL y analizar resultados de consultas aún son tareas muy tediosas y que requieren mucho tiempo. Al asignar objetos Java a tablas de base de datos (llamado ORM, "asignación de objeto / relacional"), greenDAO lo libera de estas molestias. De esta manera, puede usar una API simple orientada a objetos para almacenar, actualizar, eliminar y consultar objetos Java.

greenDAO tiene las siguientes ventajas

  • Alto rendimiento, puede ser el ORM de Android más rápido (aunque puede haber leyes de publicidad ilegales, pero tiene un buen efecto);
  • Potente API que es fácil de usar;
  • Bajo consumo de memoria;
  • Tamaño de biblioteca pequeño; (<100 KB);
  • Cifrado de base de datos de soporte: greenDAO admite SQLCipher para garantizar la seguridad de los datos del usuario

¿Cómo simplifica greenDAO las operaciones de la base de datos? Debido a que se utiliza ORM, es decir, Mapeo relacional de objetos, el objeto se refiere al objeto de la entidad comercial (aquí se refiere al objeto java), y la relación se refiere a la base de datos relacional. Al mapear una base de datos relacional y un objeto de entidad comercial, el desarrollo El personal solo se ocupa de los objetos, sin enfrentarse al engorroso lenguaje SQL. La asignación de objetos a las bases de datos se mapea con la ayuda de middleware. GreenDAO desempeña ese papel.
Inserte la descripción de la imagen aquí

3. Uso de greenDAO

3.1 Agregar greenDAO al proyecto

[Falló la transferencia de la imagen de la cadena externa, el sitio de origen puede tener un mecanismo de cadena antirrobo, se recomienda guardar la imagen y cargarla directamente (img-Xqm6OaGd-1584092039668) (¿Dónde puedo comprar ./assets/.jpg)]
GreenDAO es muy conveniente, entonces, ¿dónde puedo descargarlo? ¿Cómo agregarlo al proyecto? La configuración en el proyecto es muy simple, solo se necesitan configurar dos build.gradlearchivos, el primero está en el directorio raíz del proyecto build.gradle, el primer paso es agregarlo en el repositorio mavenCentral, porque greenDAO se coloca en Maven Central, y el segundo paso es agregar greenDAO en dependencias , Preste atención a la última versión, puede consultar el número de versión en este sitio web .

buildscript {
    repositories {
        google()
        jcenter()
        mavenCentral()
        
    }
    dependencies {
        classpath 'com.android.tools.build:gradle:3.5.2'
        classpath 'org.greenrobot:greendao-gradle-plugin:3.2.2' //
    }
}

Lo segundo que hay que modificar build.gradlees en el directorio de la aplicación. El app/build.gradleprimero es declarar el uso de greenDAO, el segundo es configurar la opción greenDAO y finalmente el greenDAO se agrega a la dependencia.

apply plugin: 'com.android.application'
apply plugin: 'org.greenrobot.greendao' 

android {
...
}
//在这里设置greenDAO的配置选项
greendao {
    schemaVersion 2
    daoPackage "com.test.greendaodemo" 
}

//build.gradle里的依赖模块
dependencies {
    implementation 'org.greenrobot:greendao:3.2.2' 
}

Entre ellos, la configuración en greenDAO admite múltiples configuraciones de atributos, de la siguiente manera:

  • schemaVersion: la versión actual de la base de datos. Si cambia el esquema de entidad / base de datos, debe aumentar este valor. Si no configura esta opción, la versión de la base de datos se establece de manera predeterminada en 1;
  • daoPackage: el nombre del paquete del DAO generado, DaoMaster y DaoSession. El valor predeterminado es el nombre del paquete donde se encuentra la entidad;
  • targetGenDir: la ubicación de almacenamiento del código generado. El valor predeterminado está en el directorio de compilación (compilación / generado / fuente / greendao);
  • generateTests: establecido en verdadero para generar automáticamente pruebas unitarias;
  • targetGenDirTests: el directorio de almacenamiento de prueba de unidad generado. El valor predeterminado es src / androidTest / java.

Después de configurar dos niveles, puede comenzar a usar greenDAO en el programa.

3.2 Crear clase de entidad

Por ejemplo, creamos una clase de entidad Libro, este paso es similar a crear una tabla de base de datos, pero aquí está la operación del objeto. El código de la clase de entidad Libro es el siguiente. Esta clase de entidad es un código Java general y no se puede asignar con la base de datos. Para usar greenDAO, debe anotar o marcar esta clase de entidad. La implementación es muy simple y se usa en la clase @EntityEs decir, se convierte en una clase de entidad que puede ser reconocida por greenDAO (no he visto el código fuente de greenDAO, supongo que greenDAO escaneará todos los archivos de código y descubrió que esta etiqueta se reconoce como la clase de entidad a mapear).

Cuando creamos una tabla de base de datos, los requisitos para cada columna pueden ser diferentes. Por ejemplo, si desea establecer una columna para crecimiento propio, el valor de una columna no puede estar vacío, etc. ¿Puede establecerse la clase de entidad de esta manera? La respuesta es sí, piense Qué variable establecer (o qué columna, debido a que la variable en la clase de entidad se convertirá al nombre de la columna de la base de datos), marcar la declaración de variable es, por ejemplo, si desea establecer idcomo una clave primaria auto-incremental, luego idagregue @Id(autoincrement = true)( Tenga en cuenta que greenDAO requiere que la clave primaria debe ser de tipo largo ). Para configurar el ISBN en una columna no vacía, agregue un comentario @NotNull, o si desea excluir una variable de la escritura en la tabla de datos, agregue un comentario @Transient. El ejemplo completo de la clase de entidad Libro es el siguiente

package com.test.greendaodemo;

import org.greenrobot.greendao.annotation.Entity;
import org.greenrobot.greendao.annotation.Id;
import org.greenrobot.greendao.annotation.NotNull;
import org.greenrobot.greendao.annotation.Transient;
import org.greenrobot.greendao.annotation.Generated;

@Entity
public class Book {
    @Id(autoincrement = true)
    private long id;
    private String name;//书名
    @NotNull
    private long ISBN;//国际标准书号
    private String author;//作者
    private float price;//价格
    @Transient
    private String press;//出版社


    @Generated(hash = 1424927682)
    public Book(long id, String name, long ISBN, String author, float price) {
        this.id = id;
        this.name = name;
        this.ISBN = ISBN;
        this.author = author;
        this.price = price;
    }

    @Generated(hash = 1839243756)
    public Book() {
    }


    //getter setter
    public long getId() {
        return id;
    }

    public void setId(int id) {
        this.id = id;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public long getISBN() {
        return ISBN;
    }

    public void setISBN(long ISBN) {
        this.ISBN = ISBN;
    }

    public String getAuthor() {
        return author;
    }

    public void setAuthor(String author) {
        this.author = author;
    }

    public float getPrice() {
        return price;
    }

    public void setPrice(float price) {
        this.price = price;
    }

    public String getPress() {
        return press;
    }

    public void setPress(String press) {
        this.press = press;
    }

    public void setId(long id) {
        this.id = id;
    }
}

Después de establecer la clase de entidad, haga clic en hacer proyecto, greenDAO generará automáticamente BookDao,DaoMastery DaoSessiontres archivos de acuerdo con esta clase de entidad , porque app/build.gradlegreendao no está configurado targetGenDir, por lo que las tres rutas de archivo generadas se colocan en la ruta predeterminada build/source/greendao. Si desea colocarlo en el directorio de código de Java, configúrelo targetGenDiren el directorio especificado. Sugiero personalmente usar la dirección predeterminada, ya que este es un código generado automáticamente que no requiere que los desarrolladores lo modifiquen. Si se coloca en el directorio de Java, los desarrolladores que no entienden greenDAO creen erróneamente que es un código escrito manualmente, pero pueden modificar el código. Error
Inserte la descripción de la imagen aquí
Aunque es un código generado automáticamente, aún necesita comprender qué hace el archivo de código generado.

  • DaoMaster: haga clic para abrir DaoMaster, puede ver que el código encapsula SQLiteDatabase y SQLiteOpenHelper (¿DatabaseOpenHelper heredado? SQLiteOpenHelper), lo que significa que la función DaoMaster es crear y actualizar la base de datos SQLite, pero también la entrada para usar greenDAO;
  • BookDAO: para cada entidad, greenDAO genera el DAO correspondiente. Debido a que el código de muestra solo crea la entidad Book, solo se genera el BookDAO. Generalmente, se nombra xxxla entidad. El DAO que se generará es xxxDAOque los DAO incluyen el método de creación de tablas basadas en la entidad. , Lectura y otros métodos;
  • DaoSession: esta clase gestiona todos los objetos DAO disponibles, como BookDao en el ejemplo, que se pueden obtener mediante el método getter.

¿Cuál es la relación entre estos tres archivos? DaoMaster es la entrada, a través de la cual se obtiene DaoSession, y DaoSession administra todos los DAO, por lo que puede obtener objetos Dao a través de DaoSession, su diagrama de relación se muestra en la siguiente figura, estaremos en el Comprende la relación cuando la uses.

[La transferencia de la imagen de la cadena externa falló, el sitio de origen puede tener un mecanismo de cadena antirrobo, se recomienda guardar la imagen y cargarla directamente (img-2eqc1yr7-1584092039669) (assets / Core-Classes-150.png)]

3.3 inicialización greenDAO

Cree una clase de aplicación y luego complete la inicialización de DaoSession en la aplicación. Esta ventaja depende del modo de aplicación única, que puede evitar la inicialización repetida de greenDAO en el futuro. El código es el siguiente, no olvide agregarlo en AndroidManifest.xml android:name=".MyApplication".

package com.test.greendaodemo;

import android.app.Application;
import android.database.sqlite.SQLiteDatabase;

public class MyApplication extends Application {
    private DaoMaster.DevOpenHelper mHelper;
    private SQLiteDatabase db;
    private DaoMaster mDaoMaster;
    private DaoSession mDaoSession;
    public static MyApplication instances;
    @Override    public void onCreate() {
        super.onCreate();
        instances = this;
        setDatabase();
    }
    public static MyApplication getInstances(){
        return instances;
    }

    /**
     * 设置greenDao
     */
    private void setDatabase() {
        // 通过 DaoMaster的内部类DevOpenHelper可获得SQLiteOpenHelper对象。
        mHelper = new DaoMaster.DevOpenHelper(this, "greenDAOdemo_db", null);
        db = mHelper.getWritableDatabase();
        mDaoMaster = new DaoMaster(db);
        mDaoSession = mDaoMaster.newSession();
    }
    public DaoSession getDaoSession() {
        return mDaoSession;
    }
    public SQLiteDatabase getDb() {
        return db;
    }
}

3.4 Use greenDAO para agregar, eliminar y modificar

Para realizar la adición, eliminación y modificación, necesita obtener el objeto DAO ¿Cómo obtener el objeto DAO? Recuerde los tres diagramas de relación de archivos generados por greenDAO mencionados anteriormente, y si aún tiene la impresión, puede saber que obtener objetos DAO requiere DaoSession, y obtener DaoSession es a través de DaoMaster. Con el objeto DAO, puede implementar fácilmente la verificación de adición, eliminación y modificación. Básicamente, solo necesita crear una instancia del objeto Libro, configurar el valor de cada propiedad del objeto Libro, y luego usar el método de verificación de adición, eliminación y modificación correspondiente a BookDao para realizar la operación correspondiente de manera simple y rápida. Ejemplos El código es el siguiente: como puede ver en el código de muestra, no vi ninguna instrucción SQL molesta en todo el proceso de agregar, eliminar, modificar y buscar, porque greenDAO generó y ejecutó las instrucciones SQL correspondientes para nosotros.

BookDao mbookdao = MyApplication.getInstances().getDaoSession().getBookDao();
        //增
        book = new Book();
        book.setId((long)2);
        book.setName("三体");
        book.setISBN((long)89327455);
        book.setAuthor("刘慈欣");
        book.setPrice((float)50.00);
        book.setPress("重庆出版社");
        mbookdao.insert(book);

        //删
        mbookdao.deleteByKey((long)1);

        //改
        book.setPrice((float)30.00);
        mbookdao.update(book);

        //查
        List<Book> booklist = mbookdao.loadAll();
        String bookname = "";
        StringBuilder stringBuilder=new StringBuilder();
        for (int i = 0; i < booklist.size(); i++) {

            bookname += booklist.get(i).getName()+",";
            stringBuilder.append(booklist.get(i).getId()+"\n");
            stringBuilder.append(booklist.get(i).getName()+"\n");
            stringBuilder.append(booklist.get(i).getAuthor()+"\n");
            stringBuilder.append(booklist.get(i).getISBN()+"\n");
            stringBuilder.append(booklist.get(i).getPress()+"\n");

        }

4. Resumen

A través del esquema ORM, greenDAO asigna clases de entidad y bases de datos para evitar que los programadores se enfrenten directamente al lenguaje SQL, lo que simplifica enormemente el proceso de desarrollo de la base de datos SQLite. Si se trata solo de una operación simple de almacenamiento de la base de datos, greenDAO se puede usar para desarrollar, porque greenDAO es fácil de usar y configurar Uso de memoria pequeño y simple, velocidad de procesamiento rápida y código abierto. Primero use una buena rueda, haga primero el trabajo organizado por el jefe y espere hasta que la fuerza haya aumentado, y luego encuentre la manera de hacer su propia rueda u optimizarla. Rueda, esto es algo que decir.

Se han publicado 19 artículos originales · ganado elogios 6 · vistas 6438

Supongo que te gusta

Origin blog.csdn.net/lansoul1987/article/details/104845696
Recomendado
Clasificación