在某些情况下, 对于一张表中的数据我们会用多个POJO类来表示,在这种情况下可以用@Embedded
注解嵌套的对象,比如:
class Address {
public String street;
public String state;
public String city;
@ColumnInfo(name = “post_code”)
public int postCode;
}
@Entity
class User {
@PrimaryKey
public int id;
public String firstName;
@Embedded
public Address address;
}
以上代码所产生的User表中,Column 为id, firstName, street, state, city, post_code
2. 创建数据访问对象(DAO)
@Dao
public interface UserDao {
@Query(“SELECT * FROM user”)
List getAll();
@Query(“SELECT * FROM user WHERE uid IN (:userIds)”)
List loadAllByIds(int[] userIds);
@Query("SELECT * FROM user WHERE first_name LIKE :first AND "
- “last_name LIKE :last LIMIT 1”)
Us
er findByName(String first, String last);
@Insert
void insertAll(List users);
@Insert(onConflict = OnConflictStrategy.REPLACE)
public void insertUsers(User… users);
@Delete
void delete(User user);
@Update
public void updateUsers(List users);
}
DAO 可以是一个接口,也可以是一个抽象类, Room会在编译时创建DAO的实现。
Tips:
@Insert
方法也可以定义返回值, 当传入参数仅有一个时返回long
, 传入多个时返回long[]
或List<Long>
, Room在实现insert方法的实现时会在一个事务进行所有参数的插入。@Insert
的参数存在冲突时,