首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

Android JectPack系列:Room组件

Android JectPack系列:Room

Jetpack 是 Android 软件组件的集合,使您可以更轻松地开发出色的 Android 应用。这些组件可帮助您遵循最佳做法、让您摆脱编写样板代码的工作并简化复杂任务,以便您可以专注于您关心的代码。

Jetpack 包含与平台 API 解除捆绑的 androidx.* 软件包库。这意味着,它提供向后兼容性并且比 Android 平台更频繁地更新,从而确保您始终可以获取最新且最好的 Jetpack 组件版本。

Room 组件是Android JectPack 的构成之一。Google 官方对于Room的概括:一个在SQLite上提供抽象层的持久存储库。Room 通过一系列针对数据访问、迁移、测试、以及线程安全的特性,帮助开发者更加轻松愉快的操作数据库,从而创建出更加优质的应用。

Room主要包含三个组件:

Database(数据库)注解:可以使用该组件创建来创建一个数据库的持有者,该注解定义了实体列表,该类的内容定义了数据库中的Dao列表。这也是访问数据库的主要入口。该类应该是继承RoomDatabase的抽象类。可以通过Room.databaseBuilder或者Room.inMemoryDatabaseBuilder() 方法获取实例。

Entity(实体)注解:该注解定义了数据库所持有的表,对于一个实例类来说,数据库会创建相应的表去持久化该类的所有项。该类在Database注解类中,通过Database的@entities 属性来引用,默认情况下,实体类中的所有字段都会被持久化在数据库中,除了那些被@Ignore 注解标记忽略的字段。(实体类可以拥有无参构造函数,或者拥有全部或者部分成员变量的构造函数)

Dao(数据访问对象):该注解表示作为数据访问对象(Dao)的类,或者接口,Dao在Room组建中扮演着极为重要的角色,Dao 中定义了负责访问数据库的方法。在由@Database标记的类中必须包含一个无参数并且返回@Dao注解的类的抽象方法。

使用步骤

创建Entity(实体)

@Entity(tableName="user")

public classUser {

@PrimaryKey

private intuid;

@ColumnInfo(name="first_name")

privateStringfirstName;

@ColumnInfo(name="last_name")

privateStringlastName;

@Ignore

private intage;

}

@Entity(tableName = "user"),@Entity 用来注解实体类,定义数据库的表结构;tableName 用来定义数据库表名(非必须,默认使用类名作为表名)。

@PrimaryKey 定义主键。

@ColumnInfo(name=""),用来定义字段名,非必须,默认使用变量名称。

@Ignore ,用来注解变量或者方法,告知Room该变量或者方法被忽略。

1

创建Dao(数据访问对象)

@Dao

public interfaceUserDao {

@Query("select * from user")

ListgetAllUser();

@Query("select * from user where uid in (:userIds)")

ListloadAllByIds(int[] userIds);

@Query("select * from user where first_name like :firstName and "+

"last_name like :lastName limit 1")

UserfindByName(String firstName,String lastName);

@Insert

voidinsertAll(User... users);

@Delete()

voiddeleteUser(User user);

}

Dao 可以是一个接口,也可以是一个抽象类,Room组件在编译时会自动创建Dao的实现

@Query() 查询,如上文所示,既可以是带参数的查询,也可以是不带参数的查询,使用极为简单。

@Insert 插入方法

@Delete 删除方法

2

创建Database(数据库对象)

@Database(entities=,version=1)

public abstract classAppDatabaseextendsRoomDatabase {

private staticAppDatabaseinstance;

private static finalObjectslock=newObject();

public abstractUserDaouserDao();

public staticAppDatabasegetInstance(Context context) {

synchronized(slock) {

if(instance==null) {

instance= Room.databaseBuilder(context,AppDatabase.class,"user.db").build();

}

returninstance;

}

}

}

必须继承RoomDataBase,并且是一个抽象类

用@Database 注解,并定义相关的entity对象

定义返回DAO对象的抽象方法

3

此篇内容只是Room组件的基本使用方法,下篇博客将更深入的介绍Room组件,敬请期待!

END

  • 发表于:
  • 原文链接https://kuaibao.qq.com/s/20181216G10LH700?refer=cp_1026
  • 腾讯「腾讯云开发者社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 cloudcommunity@tencent.com 删除。

扫码

添加站长 进交流群

领取专属 10元无门槛券

私享最新 技术干货

扫码加入开发者社群
领券