Integración y explicación detallada de la base de datos de habitaciones de los componentes de Android JetPack

fondo:

uno,

La base de datos Room es una base de datos oficial proporcionada por Google y pertenece a la biblioteca ORM.

En comparación con otros marcos ORM , Room tiene las siguientes ventajas:

  1. Verificación en tiempo de compilación@Query , Room verificará cada uno y así sucesivamente en tiempo de compilación @Entity, no solo verifica los problemas de sintaxis, sino que también verifica la existencia de la tabla, lo que significa que casi no hay riesgo de errores de tiempo de ejecución.
  2. menos código repetitivo
  3. Integración con LiveData
     

dos,

integrado:

Biblioteca dependiente:

implementación "android.arch.persistence.room:runtime:1.1.1" 
kapt "android.arch.persistence.room:compiler:1.1.1"

AnnotationProcessor introdujo la biblioteca room:compiler, lo que puede generar un error: No se puede cargar la clase com.google.auto.common.BasicAnnotationProcessor

Si usa kapt, si su proyecto admite kotlin, debe introducir un complemento que admita kotlin

 

tres,

Presente la biblioteca de la sala, estamos a punto de desarrollar el uso de la primera demostración

1. Tres componentes principales

1.1: Entidad = objeto de entidad de biblioteca de tabla

1.2: Dao: = módulo de consulta, es decir, instrucción sql, clase de control de lenguaje DDL y DML

1.3Base de datos=clase de base de datos

 Entidad:

Todos sabemos que las tablas de bases de datos son datos relacionados con campos. Esto es fácil de entender, un registro es la familiaridad de un objeto, por lo que cuando creamos una tabla, podemos marcarla con Entidad.

como sigue:

@Entity(tableName = "user_db") 
public class UserEntity { 

    /** 
     * @Entity La anotación de la clase de entidad se asignará a la estructura de tabla correspondiente en la base de datos, si no se escribe tableName, será la clase de entidad predeterminada 
     * @PrimaryKey clave primaria 
     * @ColumnInfo Si la relación entre la columna correspondiente del atributo de campo no tiene esta anotación, el nombre del atributo corresponderá al nombre del campo uno por uno 
     * @Ignorar el valor del atributo no se serializará en un campo 
     */ 

    @ColumnInfo(nombre = "edad", typeAffinity = ColumnInfo.INTEGER) 
    public int edad; 
    @ColumnInfo(nombre = "nombre") 
    public String nombre = ""; 
    @ColumnInfo(nombre = "dirección") 
    public String dirección = "" ; 
    @ColumnInfo(nombre = "móvil") 
    public String móvil = "" ; 
    @PrimaryKey(autoGenerate = true) 
    public int id;

}

Creamos una entidad UserEntity y definimos algunos datos. Especifica la información básica de la clave principal y otras columnas.

Si no tenemos ColumnInfo, entonces el nombre de la tabla instanciada es el nombre del campo. Si desea familiarizarse con la definición de nuevos campos en la tabla, puede hacer lo siguiente

@ColumnInfo(nombre = "m_móvil")

cadena pública móvil = "";

Si establece la clave principal:

@PrimaryKey(generación automática = verdadero)

id público int;

La clave principal está configurada. Después del almacenamiento, la clave principal se incrementa automáticamente.

Alguien puede preguntar qué significa el atributo typeAffinity. Todos sabemos que si no se especifica el formato de los datos de entrada, el valor predeterminado es String.Si desea especificar el tipo de datos, puede marcarlo con typeAffinity

El valor predeterminado es: SIN DEFINIR

@Entity(tableName = "user_db"): especifique la clase como una tabla y especifique un nombre de tabla (tableName).

Normalmente, la información anterior básicamente puede satisfacer las necesidades normales.

Dao:

Dao es el acceso a los datos en Java. Lo mismo ocurre aquí, proporcionar acceso y operación a la base de datos es una modificación de la interfaz.

@Dao 
interfaz pública UserDao { 


    @Query("select * from user_db") 
    public List<UserEntity> queryAll(); 

    @Query("select * from user_db where id=:id") 
    public UserEntity findUserById(int id); 


    @Update() 
    public void updateUser(entidad UserEntity); 

    @Insert(onConflict = OnConflictStrategy.REPLACE) 
    public long[] inserUser(UserEntity... entidades); 

    @Delete 
    public void deleteUser(entidad de entidad de usuario); 
}

Las operaciones básicas sobre los datos se proporcionan de la siguiente manera,

1. Consulta proporciona una consulta. Antes de crear la clase Dao, primero se debe procesar la tabla Entidad, porque en la operación Dao, si se hace referencia a la tabla, el nombre de la pestaña de la Entidad se asociará automáticamente.

2. Consulta: al escribir una consulta condicional, los parámetros de conexión de campo son los siguientes

id=:id, el nombre del campo en el parámetro table=:, no el id=id que escribimos.

3. Insertar Insertar: onConflict mecanismo de resolución de conflictos, onConflict = OnConflictStrategy.REPLACE

public @interface OnConflictStrategy { 
    /** 
     * Constante de la estrategia OnConflict para reemplazar los datos antiguos y continuar la transacción. 
     */ 
    int REEMPLAZAR = 1; 
    /** 
     * Constante de la estrategia OnConflict para deshacer la transacción. 
     */ 
    int VOLVER = 2; 
    /** 
     * Constante de la estrategia OnConflict para abortar la transacción. 
     */ 
    int ABORTAR = 3; 
    /** 
     * Constante de la estrategia OnConflict para fallar la transacción. 
     */ 
    int FALLA = 4; 
    /** 
     * Constante de estrategia OnConflict para ignorar el conflicto. 
     */ 
    int IGNORAR = 5; 

}

Puede agregar etiquetas usted mismo de acuerdo con su negocio.

Otros pueden ser investigados por ellos mismos.

3.Base de datos

Creación de la base de datos: @Database(entities = {UserEntity.class}, versión = 1)

Entidades es una tabla entre paréntesis, que es la marca que inyectamos con entidad. El último parámetro es el número de versión.

Aquí, un dato tiene al menos una tabla, y puede haber varias tablas entre paréntesis. Esta tabla debe integrar RoomDatabase, que es una clase abstracta, de la siguiente manera:

@Database(entities = {UserEntity.class}, version = 1) 
public abstract class MyRoomDataBase extends RoomDatabase { 
    public abstract UserDao getUserDao(); 

}

Creamos nuestra propia base de datos con una tabla y creamos un Dao abstracto en esta base de datos para operar con los datos.

Se han introducido los tres núcleos anteriores. Luego, necesitamos hacer una operación central, que es construir el proyecto. Si el proyecto se ejecuta con éxito, se generará una nueva clase Impl para las clases Base de datos y Dao, de la siguiente manera:

La clase MyRoomDataBase_Impl es la siguiente:

Creación dinámica de datos y generación de dao. El código específico puede ser creado por usted mismo y luego visto

 
 

La clase UserDao_Impl es la siguiente:

Genere automáticamente algunas clases de operación de base de datos y definimos métodos de operación DDL, estos son la generación automática de declaraciones sql

Si se generan estas dos clases, nuestra base de datos está básicamente completa. Si no se genera, solo sirve para explicar a qué nos referimos. Incluso si opera estas bases de datos, no podrá ejecutarlas correctamente.

cuatro,

Referencias de datos:

Conectarse a la base de datos:

MyRoomDataBase dataBase = Room.databaseBuilder(this, MyRoomDataBase.class, "userDataBase").build();

  parámetro, 

  Contexto: transmitido directamente

Class<T> klass: Es una clase modificada por la clase de base de datos @Databasex
nombre: nombre de la base de datos

La base de datos solo se puede operar después de que la creación sea exitosa

Los datos de operación de Dao deben completarse en subprocesos, ya que Dao requiere mucho tiempo y, si se opera directamente en el subproceso de la interfaz de usuario, se informará un error .

UserEntity entidad = new UserEntity(); 
entidad.dirección = "Jiangsu Nanjing"; 
entidad.edad = 12; 
entidad.móvil = "110"; 
entidad.nombre = "Zhang Sha"; 

if (dataBase == null) { 
    showToast( "Error en la inicialización de la base de datos"); 
    return; 
} 
new Thread(new Runnable() { 
    @Override 
    public void run() { 
        dataBase.getUserDao().inserUser(entity); 
    } 
}).start();

2. La operación de la base de datos en sí puede operarse a través de dataBase,

Abierto: Una vez creado, se abre

关:dataBase.close()

Ya sea para abrir: dataBase.isOpen()

Nombre de la base de datos: base de datos.getOpenHelper().getDatabaseName()

Número de versión de la base de datos: dataBase.getOpenHelper().getReadableDatabase().getVersion()

Configura tus propias cosas: dataBase.beginTransaction();dataBase.endTransaction();

Operaciones sobre la base de datos: se pueden gestionar creando una base de datos.

Lo anterior básicamente completa la operación básica de la base de datos de habitaciones.

Supongo que te gusta

Origin blog.csdn.net/qq36246172/article/details/126385379
Recomendado
Clasificación