Android Jetpack - Room

简介

谷歌提供的数据库封装库,不建议直接用Sqlite

简单使用

  1. 配置依赖
def room_version = "2.2.5"
implementation "androidx.room:room-runtime:$room_version"
//java使用
annotationProcessor "androidx.room:room-compiler:$room_version"
//kotlin使用
//kapt "androidx.room:room-compiler:$room_version"
  1. 配置表
//默认表名是user,如果想要换可以通过tableName自定义
@Entity(tableName = "my_user")
public class User {
   
	//每个表必须有primaryKey,如果需要Room自动分配可通过@PrimaryKey(autoGenerate = true)设置,该值默认false
	//如果是复合主键,可通过@Entity(primaryKeys = {"firstName", "lastName"})设置
	@PrimaryKey
	public int uid;
	//Room默认使用字段名称作为数据库中的列名称即firstName,如果想要自定义可以通过@ColumnInfo(name = "first_name")指定,默认值用defaultValue指定
	@ColumnInfo(name = "first_name", defaultValue = "a")
	public String firstName;
	@ColumnInfo(name = "last_name")
	public String lastName;
	public String image;
	public int level;
	//Room会为@Entity标注的实体中每个字段都创建一个列,如果想要忽略某个字段使用@Ignore
	//如果是继承的可以使用@Entity(ignoredColumns = {"", ""})设置
	@Ignore
	public String password;
	
	//嵌套对象使用@Embedded注解,这是在Room中的表就会为Address中的street和city字段创建列,不会新建Address表,但是插入查询等操作不变,还是使用address,
	@Embedded
	public Address address;
}

public class Address{
   
	public String street;
	@ColumnInfo(name = "local_city", defaultValue = "火星")
	public String city;
}

这边简单起见字段都用public,如果是private需要提供getter和setter方法,它们的名称要遵循Room中JavaBeans规范

此外,Sqlite是关系型数据库,Room可以在表之间添加关联

  • 一对一关联
    场景举例:每个用户至多只有一个收藏列表,想要查询出哪些用户有收藏列表
    使用:
@Entity
public class User{
   
	@PrimaryKey
	public long uid;
}
@Entity
public class Collection{
   
	@PrimaryKey
	public long cid;
	//子实体需包含父实体的主键的引用
	public long uidInCol;
}
//为它们创建一对一关联类
public class UserAndCollection{
   
	//引入其他实体需要@Embedded注解
	@Embedded
	public User user;
	//子实体需要使用@Relation注解,其中parentColumn为父实体主键列名称,entiryColumn为引用父主键的名称
	@Relation(parentColumn = "uid", entiryColumn = "uidInCol")
	public Collection collection;
}
//最后在dao中使用查询
@Transaction //原子操作
@Query("SELECT * FROM user")
public List<UserAndCollection> getUsersAndCollections();
  • .一对多关联
    场景举例:每个用户可以有多个播放列表
    使用:使用基本同一对一只是在创建关联的时候稍有不同,子实体需要用List
public class
  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值