Android Jetpack 使用Room增删改查

一、Room简介

Room是Jetpack库中的一部分,它是官方为了开发者更好的使用android数据库功能而推出的ORM框架。

什么是ORM?
ORM(Object Relational Mapping) 对象关系映射
由于我们使用的编程语音是面向对象语言,而使用的数据库是关系型数据库,所以需要在面向对象的语言和面向关系的数据库之间建立一种映射关系,这就是ORM。
使用ORM框架的好处在于我们可以用面向对象的思维来和数据库进行交互。

Room 持久性库在 SQLite 的基础上提供了一个抽象层,让用户能够在充分利用 SQLite 的强大功能的同时,获享更强健的数据库访问机制。

二、使用

Room的整体结构由3个部分组成:Entity、Dao、Database

Entity就是数据的实体类,每个实体类对应数据库中的一张表,表中的列根据实体类中字段自动生成;

Dao数据库访问接口,在这里封装对数据库的各种操作;

Database用于定义数据库中的关键信息,提供Dao层的访问实例。

下面就开始使用room写一个增删改查的小案例:
在这里插入图片描述

1、添加依赖

使用Room需要我们加入一个插件以及两个依赖库
添加kotlin-kapt插件:

plugins {
    id 'com.android.application'
    id 'kotlin-android'
    id 'kotlin-android-extensions'
    id 'kotlin-kapt'
}

添加依赖

def room_version = "2.2.6"
implementation "androidx.room:room-runtime:$room_version"
kapt "androidx.room:room-compiler:$room_version"

2、创建数据实体类

package com.example.roomdemo

import androidx.room.Entity
import androidx.room.PrimaryKey

@Entity
data class Book(var name:String,var author:String,var pages:Int,var prise:Float) {

    @PrimaryKey(autoGenerate = true)
    var id:Long = 0

}

使用注解@Entity来标明这是一个实体类,在类中添加一个id字段,使用@PrimaryKey(autoGenerate = true)注解来声明这是主键而且它的值是自动生成的。

3、创建Dao接口层

Dao层的作用就是封装对数据库的各种操作,覆盖所有的业务需求。
Room提供了@Insert、@Delete、@Update、@Query来进行增删改查的操作。
在接口上面使用@Dao注解让Room知道这是一个Dao类

package com.example.roomdemo

import androidx.room.*

@Dao
interface BookDao {
    //增加
    @Insert
    fun insertBook(book:Book):Long

    //删除
    @Delete
    fun deleteBook(book: Book)

    //更新
    @Update
    fun updateBook(newBook: Book)

    //查询
    @Query("select * from Book")
    fun queryAllBooks():List<Book>

    //按条件查询
    @Query("select * from Book where pages > :page")
    fun getBookByPage(page:Int):List<Book>

    //按条件删除
    @Query("delete from Book where pages > :page")
    fun deleteBookByPage(page: Int):Int

}

注意,在使用非实体类参数增 删 改时,使用的是@Query注解
例如:

//按条件删除
@Query("delete from Book where pages > :page")
fun deleteBookByPage(page: Int):Int

4、创建RoomDatabase扩展类

我们需要自定义一个抽象类来继承RoomDatabase类,必须是抽象类。

package com.example.roomdemo

import android.content.Context
import androidx.room.Database
import androidx.room.Room
import androidx.room.RoomDatabase

@Database(version = 1, entities = [Book::class])
abstract class AppDatabase: RoomDatabase() {

    abstract fun bookDao(): BookDao

    companion object{
        private var instance:AppDatabase? = null

        @Synchronized
        fun getDatabase(context:Context):AppDatabase{
            instance?.let {
                return it
            }
            return Room.databaseBuilder(context.applicationContext,
                AppDatabase::class.java,
                "BookStore.db")
                .build().apply {
                    instance = this
                }
        }
    }
}

使用@Database(version = 1, entities = [Book::class])注解来定义数据库的版本,以及表对应的实体类,多个实体类用逗号分隔。
在该类中,用单例模式来保证全局只有一个AppDatabase实例。然后提供一个抽象方法用于获取Dao类实例,我们不需要这里创建Dao类实例,只需声明方法,因为room底层会帮我们完成创建。

5、执行增删改查

在布局中放几个按钮,在按钮的点击事件中执行增删改查的操作

package com.example.roomdemo

import androidx.appcompat.app.AppCompatActivity
import android.os.Bundle
import kotlinx.android.synthetic.main.activity_main.*
import kotlin.concurrent.thread

class MainActivity : AppCompatActivity() {
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)
        val bookDao = AppDatabase.getDatabase(this).bookDao()
        val book1 = Book("Android开发艺术探索","任玉刚",467,56.00f)
        val book2 = Book("第一行代码","郭霖",672,80.00f)
        //增加两条数据
        addData.setOnClickListener {
            thread {
                book1.id = bookDao.insertBook(book1)
                book2.id = bookDao.insertBook(book2)
            }
        }
        //删除两条数据
        deleteData.setOnClickListener {
            thread {
                bookDao.deleteBook(book1)
                bookDao.deleteBook(book2)
            }
        }
        //将book1的价格更新为52.00
        updateData.setOnClickListener {
            thread {
                book1.prise = 52.00f
                bookDao.updateBook(book1)
            }
        }
        //查询所有数据
        selectData.setOnClickListener {
            thread {
                for (book in bookDao.queryAllBooks()) {
                    println(book.toString())
                }
            }
        }
        //查询页数大于500的书籍
        selectByPage.setOnClickListener {
            thread {
                for (book in bookDao.getBookByPage(500)) {
                    println("页数大于500的书籍:$book")
                }
            }
        }
        //删除页数大于500的书籍
        deleteByPage.setOnClickListener {
            thread {
                val num = bookDao.deleteBookByPage(500)
                println("删除页数大于500的书籍:$num")
            }
        }

    }

}
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Android Jetpack是一组用于Android应用程序开发的库集合,旨在帮助开发者简化开发流程、提高生产力和应用性能。它提供了一些常用的组件和工具,可以帮助开发者解决常见的开发问题。 要使用Android Jetpack,您需要在您的项目中添加相关的Jetpack库依赖。您可以通过在项目的build.gradle文件中添加相应的依赖来实现。例如,要使用Navigation组件,您可以添加以下依赖: implementation "androidx.navigation:navigation-fragment-ktx:2.3.5" implementation "androidx.navigation:navigation-ui-ktx:2.3.5" 一旦您添加了所需的依赖,您可以开始使用Jetpack组件了。对于Navigation组件,您可以使用Navigation图形化界面来创建和管理应用程序中的导航结构,并使用NavController来处理导航操作。 另外,为了更好地理解和学习Android Jetpack,您可以借助官方文档和示例代码来深入学习。官方文档提供了详细的介绍和用法示例,而示例代码可以帮助您更好地理解如何在实际项目中应用Jetpack组件。 总结起来,要使用Android Jetpack,您需要添加相关的库依赖,并根据具体的组件使用文档进行配置和使用。通过深入学习官方文档和示例代码,您可以更好地理解和掌握Jetpack使用。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *3* [Android Jetpack架构开发,从入门到实战,看这一篇就够了](https://blog.csdn.net/Eqiqi/article/details/127534594)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"] - *2* [Android JetPack学习](https://blog.csdn.net/weixin_39069034/article/details/100170739)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值