JetPack架构---ORM数据库Room的使用
Posted 战国剑
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了JetPack架构---ORM数据库Room的使用相关的知识,希望对你有一定的参考价值。
Room 库在 android在sqlite 的基础上做的一个封装,让用户能更方便的使用数据库。
Room库实际与GreenDao数据库类似,优于GreenDao的是:
(1)Room库的sql语句,在编译时,编译器会做检查。
(2)整体上使用更方便,也因是官方库,会有更好的支持。
一、依赖
在build中新增依赖
def room_version = "2.2.5"
implementation "androidx.room:room-runtime:$room_version"
annotationProcessor "androidx.room:room-compiler:$room_version"
二、简单使用
与通常使用数据库类似,定义好数据库、表、字段即可使用。
Room中定义,都是以注解方式标记,看上面依赖中的annotationProcessor即可知道,这些注解都将在编译时做处理,会根据注解生成数据库、表。
Room的写法与用法有特定格式:
(1)表与字段的定义
@Entity
public class RoomEntity
@PrimaryKey(autoGenerate = true)
public int id;
public String name;
public String mark;
@ColumnInfo(name = "student_")
public boolean student;
public int age;
常用注解标识:
@Entity标记使用上述结构生成一张表(Entity也可自定义表名、索引、是否忽略某列等)。
@PrimaryKey(autoGenerate = true),则表示字段自增长。
@ColumnInfo(name = "student_"),表示字段在表中的名称,无该注解,则使用字段本身作为字段名。
以上方式即定义好了表与字段,接着是数据库定义与使用。
(2)数据库定义与使用
2-0:Dao文件定义
首先定义好一个Dao文件,该文件即是操作数据文件,后续所有操作数据库的操作,都将在此处实现。
这是一个以@Dao注解为标识的接口。内部可通过表结果做增、删、改,也可以通过具体的sql语句,做增删改查。
如下所示,此处的sql语句,在编译时,编译器会检查正确性。
@Dao
public interface RoomDao
@Insert
public long insert(RoomEntity entity);
@Delete
public int delete(RoomEntity entity);
@Update
public int update(RoomEntity entity);
@Query("select * from RoomEntity where name= :name")
public long queryByName(String name);
@Query("update RoomEntity set age = :age where name= :name")
public int updateByName(String name,int age);
@Query("select * from RoomEntity")
public List<RoomEntity> queryAll();
@Query("delete from RoomEntity where name= :name")
public int deleteByName(String name);
2-1:数据库的生成
新建一个数据库文件,以注解@Database标记。
该类是一个抽象类型的单例。
把需要对外展示的Dao文件,以抽象类的形式定义到类中,如 abstract RoomDao roomDao();经过编译后,该抽象类会与相应的方法实现自动绑定。
@Database(version = 1, entities = RoomEntity.class, exportSchema = false)
public abstract class RoomDataBase extends RoomDatabase
public abstract RoomDao roomDao();
private static RoomDataBase roomDataBase;
public static RoomDataBase instance()
if (roomDataBase == null)
synchronized (RoomDataBase.class)
roomDataBase = Room
.databaseBuilder(WeatherApplication.globalContext, RoomDataBase.class, "app_database")
.allowMainThreadQueries()
.build();
return roomDataBase;
这里需定义数据库的version版本、关联的表entities。
exportSchema设置为false则不会生成json结构文件,供用户查看
exportSchema设置为true,则需要指定导出的路径,会在该路径上生成json文件,文件内容是数据库结构。
//指定room.schemaLocation生成的文件路径
javaCompileOptions
annotationProcessorOptions
arguments = ["room.schemaLocation": "$projectDir/schemas".toString()]
2-3:如何使用
取得Dao文件,并操作Dao中的方法。
RoomDao dao = RoomDataBase.instance().roomDao()
RoomEntity entity = new RoomEntity();
entity.name = "张三";
entity.mark = "备注";
entity.age = 18;
entity.student = false;
dao.insert(entity);
三、Room的更多使用
Room本身还有更多复杂的使用,如表结构的嵌套、表关联、数据库的升级、降级等,可根据官方介绍使用。
以上是关于JetPack架构---ORM数据库Room的使用的主要内容,如果未能解决你的问题,请参考以下文章
Jetpack 总结系列- Google-Room数据库使用
Jetpack 总结系列- Google-Room数据库使用
Android JetPack组件之Room数据库的集成与详解