以上代码所产生的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”)
User 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
的参数存在冲突时, 可以设置onConflict
属性的值来定义冲突的解决策略, 比如代码中定义的是@Insert(onConflict = OnConflictStrategy.REPLACE)
, 即发生冲突时替换原有数据@Update
和@Delete
可以定义int
类型返回值,指更新/删除的函数
DAO中的增删改方法的定义都比较简单,这里不展开讨论,下面更多的聊一下查询方法。
2.1 简单的查询
Talk is cheap, 直接show code:
@Query(“SELECT * FROM user”)
List getAll();
Room会在编译时校验sql语句,如果
@Query()
中的sql语句存在语法错误,或者查询的表不存在,Room会在编译时报错。