- 三、Room踩坑解答
=======================================================================
ORM(Object Relational Mapping)关系映射库,在Sqlite上提供了一层封装,优化数据库操作的便捷性。
Room的架构图如下所示:
-
Entity:一个Entity对应于数据库的一张表。Entity类是Sqlite表结构对Java类的映射,在Java中可以被看作一个Model类。
-
Dao:即 Data Access Objects,数据访问对象。顾名思义,我们可以通过它访问对象。
一个Entity对应一张表,而每张表都需要一个Dao对象,用于对表的增删改查。Room对象被实例化之后,我们就可以通过数据库实例得到Dao对象(Get Dao),然后通过Dao对象对表中的数据进行操作。
依赖
buildscript {
//android room version
ext.room_version = ‘2.3.0’
}
// room
implementation “androidx.room:room-runtime:$room_version”
kapt “androidx.room:room-compiler:$room_version”
// optional - room kotlin 扩展
implementation “androidx.room:room-ktx:$room_version”
=============================================================================
通过创建一个简单的学生数据库表,来熟悉Room的基本使用。
- 创建一个关于学生的Entity,即创建一张学生表SimpleStudentEntity。
Entity标签用于将SimpleStudent类与Room中的数据表对应起来。tableName属性可以为数据表设置表名,若不设置,则表名与类名相同。
PrimaryKey标签用于指定该字段作为表的主键。 autoGenerate = true Set to true to let SQLite generate the unique id.(设置为 true 让 SQLite 生成唯一的 id。)
ColumnInfo标签可用于设置该字段存储在数据库表中的名字,并指定字段的类型。
同时为了,其他地方对于表明以及字段相关的引用,我们这里声明为顶层常量(java 的静态常量),方便引用。
/**
- 表名字相关,统一定义.
*/
const val SIMPLE_STUDENT_TABLE_NAME = “simple_student”</