Kotlin实战---使用Room封装本地数据层,android开发艺术探索pdf

1、为什么使用Room

Room 是一个 SQLite 对象映射库。它可用来避免样板代码,还可以轻松地将 SQLite 表数据转换为 Java 对象。Room 提供 SQLite 语句的编译时检查,并且可以返回 RxJava、Flowable 和 LiveData 可观察对象,使用ROOM可以让你更简单,更流畅的操作数据库,使用简单通过注解的方式就能对数据库进行增删改查,Google工程师帮你封装了访问SqlLite的代码,使你的代码性能更高

2、数据库的封装

先来一个图,理清思路再看代码

在这里插入图片描述

2.1、LocalRoomRequestManager

接口层实现,类似于网络模块里的API,将操作SqlLite的接口写到这里边

/*

《Android学习笔记总结+最新移动架构视频+大厂安卓面试真题+项目实战源码讲义》

【docs.qq.com/doc/DSkNLaERkbnFoS0ZF】 完整内容开源分享

**

  • 数据库获取标准接口,数据库读取
  • 只为 LocalRoomRequestManager 服务
  • DB 数据
    */
    interface IDatabaseRequest {
    fun insertStudents(vararg students: Student)

fun updateStudents(vararg students: Student)

fun deleteStudents(vararg students: Student)

fun deleteAllStudent()

fun queryAllStudent() : List ?

// TODO 可扩展 …
}

/**

  • 为了扩展,这样写(在仓库里面的)
  • 本地获取标准接口(在仓库里面) 也就是本地的数据读取(包括本地xml数据,等)
  • 只为 LocalRoomRequestManager 服务
  • xml 数据 本地数据
    */
    interface ILocalRequest {
    }

LocalRoomRequestManager类的实现,初始化的通过dataBase层获取dao,然后通过dao层进行增删改查

class LocalRoomRequestManager :ILocalRequest,IDatabaseRequest{
var studentDao:StudentDao?=null
//相当于Java代码的构造代码块
init{
val studentDatabase=StudentDatabase.getDataBase()
studentDao=studentDatabase?.getStudentDao()
}
companion object{
var INSTANCE: LocalRoomRequestManager? = null

fun getInstance() : LocalRoomRequestManager {
if (INSTANCE == null) {
synchronized(LocalRoomRequestManager::class) {
if (INSTANCE == null) {
INSTANCE = LocalRoomRequestManager()
}
}
}
return INSTANCE!!
}
}
override fun updateStudents(vararg students: Student) {
studentDao?.updateStudents(*students)
}

override fun deleteStudents(vararg students: Student) {
studentDao?.deleteStudent(*students)
}

override fun deleteAllStudent() {
studentDao?.deleteAllStudent()
}

override fun queryAllStudent(): List? {
return studentDao?.queryAllStudents()
}

override fun insertStudents(vararg students: Student) {
studentDao?.insertStudents(*students)
}

}

2.2、Room操作

真正用来操作数据库的代码

初始化数据库

@Database(entities = [Student::class],version = 1)
abstract class StudentDatabase: RoomDatabase() {
abstract fun getStudentDao():StudentDao

companion object{
private var INSTANCE:StudentDatabase?=null
//Application 调用
fun getDatabase(context: Context):StudentDatabase?{
if(INSTANCE==null){
INSTANCE=Room.databaseBuilder(context,StudentDatabase::class.java,“student_database.db”)
.allowMainThreadQueries()//允许在主线程查询
.build()
}
return INSTANCE
}
//使用者调用
fun getDataBase():StudentDatabase?= INSTANCE
}

}

在Application里去初始化database

class MyApplication : Application() {

override fun onCreate() {
super.onCreate()

// 初始化
StudentDatabase.getDatabase(this)
}

}

Room.databaseBuilde 就是实例化的DataBase的实现类 实现类里的代码: 在这里插入图片描述 这些都是框架生成的代码,省去了我们许多的样板代码 Dao层和Entity实现

@Dao
interface StudentDao {
/***

  • 可变参数,插入数据
    */
    @Insert
    fun insertStudents(vararg students:Student)
    //更新数据
    @Update
    fun updateStudents(vararg students:Student)

//根据条件删除
@Delete
/***

  • 可变参数,插入数据
    */
    @Insert
    fun insertStudents(vararg students:Student)
    //更新数据
    @Update
    fun updateStudents(vararg students:Student)

//根据条件删除
@Delete

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值