Android Room 使用@Update 更新部分字段

在之前的Room版本中,如果在dao 中 使用@update 会更新关联的主键数据的那一行的所有数据

但是在 androidx.room:room-*:2.2.0 之后,我们可以做到部分更新

官方解释如下

目标实体:DAO 注释 @Insert@Update 和 @Delete 现在具有一个新属性 targetEntity,可用于指定要采用 DAO 方法的目标表。这样一来,这些 DAO 方法的参数就可以是任意 POJO,这些 POJO 将被解释为部分实体。实际上,这允许部分插入、删除和更新

举例如下:

@Entity
class FriendRequest (
    @PrimaryKey
    @NotNull
    val fromUserName: String
) {
    var toUserName = ""
    var userFaceUrl = ""
    var userSex = 1
    var userSelfSignature = ""
    var userBirthday = ""
    var notes = ""
    var addTime = 0L
    var status = STATUS_VERIFY_NONE
}


data class FriendRequestStatus(val fromUserName: String, val status: Int)

data class FriendRequestProfile(val fromUserName: String,
                                val userFaceUrl: String,
                                val userSex:Int,
                                val userSelfSignature: String,
                                val userBirthday: String)
@Dao
interface FriendRequestDao {

    @Insert(onConflict = OnConflictStrategy.REPLACE)
    fun insert(vararg friendRequestRequest: FriendRequest)

    @Update
    fun update(vararg friendRequestRequest: FriendRequest)

    @Update(entity = FriendRequest::class)
    fun updateStatus(vararg status: FriendRequestStatus)

    @Update(entity = FriendRequest::class)
    fun updateProfile(vararg profile: FriendRequestProfile)

}

只要确保entity中传入的类的属性,包含了FriendRequest类的主键以及想要修改的值(属性名字需与FriendReques类一致)即可

你可能感兴趣的:(Android Room 使用@Update 更新部分字段)