Android从零开始搭建MVVM架构(4)————Room(从入门到进阶)(1)

本文详细介绍了在Android应用中使用RoomORM进行数据库建表、字段定义、外键约束、索引设置、数据操作和版本升级的方法,以及如何结合RxJava进行异步操作。
摘要由CSDN通过智能技术生成

意思就是我们要往数据库里建表、建字段。就是使用这个bean对象。首先介绍下注解

  • @Entity : 数据表的实体类。
  • @PrimaryKey : 每一个实体类都需要一个唯一的标识。
  • @ColumnInfo : 数据表中字段名称。
  • @Ignore : 标注不需要添加到数据表中的属性。
  • @Embedded : 实体类中引用其他实体类。
  • @ForeignKey : 外键约束。

这里我们建一个Person类(为了能保存数据,使数据持久化且Room必须能够对它进行操作,你可以用public修饰属性,或者你也可以设置成private,但必须提供set和get方法)。这里只是简单展示,后面详细讲解,觉得细节太多了

表名为person的表

@Entity
public class Person {
public Person(String name, int age) {
this.name = name;
this.age = age;
}

@PrimaryKey(autoGenerate = true)
@ColumnInfo(name = “uid”)
private int uid;

private String name;
private int age;

@Ignore
private int money;
@Embedded
private Address address;

//…我用的是private,暂且去掉了set和get方法。便于读者理解
}

public class Address {
private String city;
private String street;
//…省略部分代码,便于理解
}

2.1、@Entity

用了@Entity标注的类,表示当前类的类名作为表名,这个类里面的所有属性,作为表里的字段。这里我们先只关注@Entity来讲,后面又很多细节,文章接下来都以这种讲解分格。更加直击重点

2.1.1、如果不想用类名作为表名,我们可以这样

//这样的话,我们的表名就变成了 other
@Entity(tableName = “other”)
public class Person {
}

2.1.2、@Entity里的复合主键

在Person里,我们用@PrimaryKey(autoGenerate = true)标识uid为主键,且设置为自增长。设置为主键的字段不得为空也不允许有重复值。

复合主键:多字段主键则构成主键的多个字段的组合不得有重复(假如我们用name做主键,如果我们有2个name相同的数据一起插入,数据就会被覆盖掉。但是现实中真的有同名的人,是2条数据,这时候我们就要用name和出生日期作为复合主键也就是多个主键,主键都一致才会覆盖数据)

@Entity(primaryKeys = {“uid”,“name”})
public class Person {
}

直接这样设置后,运行项目。这里有几点要注意的:

  • 首先会报错:You must annotate primary keys with @NonNull. “name” is nullable。所以要加上,

@Entity(primaryKeys = {“uid”,“name”})
public class Person {
//name字段要用@NonNull标注
@NonNull
private String name;
}

2.1.3、@Entity里的索引的使用

索引的使用(有单列索引和组合索引,还有索引的唯一性)

//单列索引 @Entity(indices = {@Index(value = “name”)})
//单列索引唯一性 @Entity(indices = {@Index(value = “name”, unique = true)})
//组合索引 @Entity(indices ={@Index(value = {“name”,“age”})})
//组合索引唯一性 @Entity(indices ={@Index(value = {“name”,“age”},unique = true)})
//当然可以混起来用 如下:
@Entity(indices ={@Index(value = “name”),@Index(value = {“name”,“age”},unique = true)})
public class Person {

}

  • 数据库索引是用来提高数据库访问速度的,可以说单纯是优化的意思。我们加上索引后,之后的其他操作都没有变的
  • 如果加上唯一性有点类似主键,重复数据会报错,但是索引并不像主键那样,作为条件才能去覆盖数据
  • 插入数据的时候加上动作@Insert(onConflict = OnConflictStrategy.REPLACE)加上动作,他的意思是主键相同的话,旧数据会替换新数据。但如果我们主键不
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值