Room
是一种ORM(对象关系映射)框架,可以用OOP(面向对象)的思路开发数据库,有点像早期的greenDAO,不过Room
作为Jetpack
的一员,能够返回更多类型的数据,比如能直接返回DataSource.Factory
来友好的支持Paging
的使用,本文主要总结基础的使用和原理。
本文源码基于SDK 29
使用
引入依赖:
1 | def room_version = "2.2.3" |
用@Entity
表示一个实体,即数据库中表的定义,
1 | //声明一个实体User,表名为t_user |
使用@Dao
声明数据访问对象,即表的操作,
1 |
|
定义完表,还需要用@Database
定义数据库,
1 | //entities表示这个数据库都有哪些表,version表示数据库版本,用于数据库升级 |
来到activity,进行使用
1 | RoomActivity extends AppCompatActivity { |
原理
首先看看数据库的创建,进入AppDatabase
类,点击查看他的实现类AppDatabase_Impl
,
1 | //AppDatabase_Impl.java |
来到UserDao_Impl
,
1 | //UserDao_Impl.java |
insert会来到EntityInsertionAdapter
,
1 | //EntityInsertionAdapter.java |
优缺点
- 优点:
- 使用简单,能友好的支持
Paging
(后续介绍)
- 使用简单,能友好的支持
- 缺点:
- 生成的类会增大包体积,当然值不值得就得看ROI了。
性能方面的问题暂不做分析。