下面是一个简单的示例,展示了如何在Android Room SQLite中使用自定义查询与MVVM模式。
首先,在build.gradle文件中添加以下依赖项:
implementation 'androidx.room:room-runtime:2.3.0'
kapt 'androidx.room:room-compiler:2.3.0'
接下来,创建一个实体类(Entity):
@Entity(tableName = "users")
data class User(
@PrimaryKey val id: Int,
val name: String,
val age: Int
)
然后,创建一个数据访问对象(DAO):
@Dao
interface UserDao {
@Query("SELECT * FROM users")
fun getAllUsers(): LiveData>
@Query("SELECT * FROM users WHERE age > :minAge")
fun getUsersByAge(minAge: Int): LiveData>
@Insert(onConflict = OnConflictStrategy.REPLACE)
suspend fun insertUser(user: User)
@Delete
suspend fun deleteUser(user: User)
}
接下来,创建一个数据库类:
@Database(entities = [User::class], version = 1)
abstract class AppDatabase : RoomDatabase() {
abstract fun userDao(): UserDao
companion object {
@Volatile
private var INSTANCE: AppDatabase? = null
fun getDatabase(context: Context): AppDatabase {
return INSTANCE ?: synchronized(this) {
val instance = Room.databaseBuilder(
context.applicationContext,
AppDatabase::class.java,
"app_database"
).build()
INSTANCE = instance
instance
}
}
}
}
然后,创建一个仓库类:
class UserRepository(private val userDao: UserDao) {
val allUsers: LiveData> = userDao.getAllUsers()
fun getUsersByAge(minAge: Int): LiveData> {
return userDao.getUsersByAge(minAge)
}
suspend fun insertUser(user: User) {
userDao.insertUser(user)
}
suspend fun deleteUser(user: User) {
userDao.deleteUser(user)
}
}
接下来,创建一个ViewModel类:
class UserViewModel(private val userRepository: UserRepository) : ViewModel() {
val allUsers: LiveData> = userRepository.allUsers
fun getUsersByAge(minAge: Int): LiveData> {
return userRepository.getUsersByAge(minAge)
}
fun insertUser(user: User) {
viewModelScope.launch(Dispatchers.IO) {
userRepository.insertUser(user)
}
}
fun deleteUser(user: User) {
viewModelScope.launch(Dispatchers.IO) {
userRepository.deleteUser(user)
}
}
}
最后,在Activity或Fragment中使用ViewModel来获取和操作数据:
class MainActivity : AppCompatActivity() {
private lateinit var userViewModel: UserViewModel
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
val userDao = AppDatabase.getDatabase(application).userDao()
val userRepository = UserRepository(userDao)
userViewModel = ViewModelProvider(this, UserViewModelFactory(userRepository)).get(UserViewModel::class.java)
// 获取所有用户
userViewModel.allUsers.observe(this, { users ->
// 更新UI
})
// 获取年龄大于20的用户
userViewModel.getUsersByAge(20).observe(this, { users ->
// 更新UI
})
// 插入新用户
val newUser = User(1, "John Doe", 25)
userViewModel.insertUser(newUser)
// 删除用户
userViewModel.deleteUser(newUser)
}
}
这就是一个简单的使用Android Room SQLite进行自定义查询与MVVM的示例。你可以根据自己的需求进行修改和扩展。