ROOM
前言
每一样新事物的接触都需要我们去慢慢消化和接受,只有不断地练习才能最终成就自己!
ROOM
Room持久库提供了一个SQLite抽象层,让你访问数据库更加稳健,提升数据库性能。
该库帮助您在运行应用程序的设备上创建应用程序的数据缓存。这个缓存是你的应用程序唯一的真实来源,允许用户查看应用程序中关键信息的一致副本,而不管用户是否有Internet连接。
关于ROOM结构
主键
每个实体必须定义至少1个字段作为主键。即使只有1个字段,仍然需要用@PrimaryKey注解字段。此外,如果您想Room自动分配IDs给实体,则可以设置@ PrimaryKey的autoGenerate属性。如果实体具有复合主键,则可以使用@Entity注解的primaryKeys属性,
与tableName属性类似,Room使用字段名称作为数据库中的列名。如果希望列具有不同的名称,请将@ColumnInfo注解添加到字段中。
定义对象关系
因为SQLite是关系数据库,所以可以指定对象之间的关系。尽管大多数对象关系映射库允许实体对象相互引用,但Room明确禁止这一点。要了解这一决定背后的技术原理,请了解为什么Room不允许对象引用。
即使您不能使用直接关系,Room仍然允许您定义实体之间的外键约束。
创建嵌套对象
有时,即使对象包含多个字段,您也希望在数据库逻辑中将实体或普通Java对象(POJO)表示为一个有粘性的整体。在这些情况下,可以使用@Embedded注解来表示要分解成表中的子字段的对象。然后,可以像其他单个列一样查询嵌入式字段。
使用Room DAOs访问数据
使用“Room persistence library”访问应用程序的数据,可以使用数据访问对象或DAOs。这组DAO对象构成了Room的主要组件,因为每个DAO都包含了对应用程序数据库访问的抽象方法。
通过使用DAO类访问数据库而不是查询构造器或直接查询,可以分离数据库体系结构的不同组件。此外,DAOs允许您在测试应用程序时轻松模拟数据库访问。
注意:在向应用程序添加DAO类之前,将架构组件库添加到应用程序的build.gradle中。
DAO既可以是接口,也可以是抽象类。如果是抽象类,它可以有一个构造函数,它把RoomDatabase作为唯一的参数。Room在编译时创建每个DAO实现。
注意:除非在建造器上调用了allowMainThreadQueries(),否则Room不支持主线程上的数据库访问,因为它可能会长时间锁定UI。返回LiveData或Flowable实例的异步查询可免除此规则,因为它们在需要时异步地在后台线程上运行查询。
定义查询方法
有多种查询方法,可以使用DAO类来表示。这个文档包括几个常见的例子。
插入
当您创建一个DAO方法并用@Insert注解时,Room生成一个实现,在一个事务中将所有参数插入到数据库中。
更新与删除
Update方法在数据库中用于修改一组实体的字段。它使用每个实体的主键来匹配查询。
Delete方法用于从数据库中删除给定参数的一系列实体,它使用主键匹配数据库中相应的行。
数据表
DataTable
是一个临时保存数据的网格虚拟表(表示内存中数据的一个表。)。DataTable是ADO dot net 库中的核心对象。它可以被应用在 VB 和 ASP 上。它无须代码就可以简单的绑定数据库。它具有微软风格的用户界面。
其他使用DataTable的对象包括DataSet和DataView。
有鉴于数据库的操作已学习,在此不再赘述。