Room数据库|青训营笔记

132 阅读3分钟

这是我参与「第四届青训营 」笔记创作活动的第9天

构建Room 数据库

  • 我们了解过SQLite数据库就知道,它仅仅是使用了一些原生的API来进行数据的增删改查操作。这些原生API虽然简单易用,但是如果放到大型项目当中的话,会非常容易让项目的代码变得混乱,除非你进行了很好的封装。
  • 为此市面上出现了诸多专门为Android数据库设计的ORM框架。
  • ORM(Object Relational Mapping)也叫对象关系映射。简单来讲,我们使用的编程语言是面向对象语言,而使用的数据库则是关系型数据库,将面向对象的语言和面向关系的数据库之 间建立一种映射关系,这就是ORM了。

- 那么使用ORM框架有什么好处呢?

  • 它赋予了我们一个强大的功能,就是可以用面向对象的思维 来和数据库进行交互,绝大多数情况下不用再和SQL语句打交道了,同时也不用担心操作数据 库的逻辑会让项目的整体代码变得混乱。
  • 由于许多大型项目中会用到数据库的功能,为了帮助我们编写出更好的代码,Android官方推出 了一个ORM框架,并将它加入了Jetpack当中,也就是Room。

  • Room提供了SQLite的抽象层,以便在充分利用SQLite的同时允许流畅的数据库访问。

Room与其他ORM框架对比有以下优点:

编译期检查,Room会在编译的时候验证每个@Query和@Entity等,它不仅检查语法问题,还会检查是否有该表,这就意味着几乎没有任何运行时错误的风险

Room有3个主要组件:

  • Entity : 数据实体,对应数据库中的表。

用于定义封装实际数据的实体类,每个实体类都会在数据库中有一张对应的表,并且表中的列是根据实体类中的字段自动生成的。

  • Dao :数据访问对象

Dao是数据访问对象的意思,通常会在这里对数据库的各项操作进行封装,在实际编程的时候,逻辑层就不需要和底层数据库打交道了,直接和Dao层进行交互即可。

  • Database:数据库持有者

用于定义数据库中的关键信息,包括数据库的版本号、包含哪些实体类以及提供Dao层的访问实例

————————————————

Room的使用

  • 首先先在app/build.gradle文件中添加 依赖,同时在dependencies闭包中添加了两个Room的依赖库
  • 下面我们就按照刚才介绍的Room的3个组成部分一一来进行实现,首先是定义Entity,也就是实体类。

例如下面这个例子:

 @Entity
data class User(var firstName: String, var lastName: String, var age: Int) {
@PrimaryKey(autoGenerate = true)
var id: Long = 0
}

创建表一般会用到下面几个注解:

@Entity(tableName=“表名称”)

定义一个表

@PrimaryKey(autoGenerate=true)

定义主键

@ColumnInfo(name = “列名”)

定义列名

@Ignore

忽略某个字段

  • Dao
    @Insert@Delete@Update@Query 代表我们常用的插入、删除、更新、查询数据库操作。
  • DataBase
    接下来我们进入最后一个环节:定义Database。这部分内容的写法是非常固定的,只需要定义 好3个部分的内容:数据库的版本号、包含哪些实体类,以及提供Dao层的访问实例。