06Kotlin项目实操之Room数据库

Posted 清风百草

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了06Kotlin项目实操之Room数据库相关的知识,希望对你有一定的参考价值。

(1)一个人只要自己不放弃自己,整个世界也不会放弃你.
(2)天生我才必有大用
(3)不能忍受学习之苦就一定要忍受生活之苦,这是多么痛苦而深刻的领悟.
(4)做难事必有所得
(5)精神乃真正的刀锋
(6)战胜对手有两次,第一次在内心中.
(7)好好活就是做有意义的事情.
(8)亡羊补牢,为时未晚
(9)科技领域,没有捷径与投机取巧。
(10)有实力,一年365天都是应聘的旺季,没实力,天天都是应聘的淡季。
(11)基础不牢,地动天摇
(12)写博客初心:成长自己,辅助他人。当某一天离开人世,希望博客中的思想还能帮人指引方向.
(13)编写实属不易,若喜欢或者对你有帮助记得点赞+关注或者收藏哦~

【06】Kotlin项目实操之Room数据库

文章目录

1.Room

(1)是SQlite数据库的抽象
(2)为了更加流畅的访问SQLite数据库

1.1如何做到流畅

(1)只需要使用注解即可以完成增删改查
(2)生成增删改查代码,它所生成的代码是在编译期完成的。
(3)生成的代码做了很多的优化
(4)使用了事务控制

2.案例

2.1数据表实体

/**
 * @author XiongJie
 * @version appVer
 * @Package com.gdc.kotlinproject.database
 * @file
 * @Description:
 * (1)@Entity注解在编译期生成代码
 * @date 2021-6-4 15:15
 * @since appVer
 */
@Entity
class Student() 
    /**
     * 主键唯一并自增
     */
    @PrimaryKey(autoGenerate = true)
    var id : Int = 0

    /**
     * 1.懒加载
     * 2.字段别名,如果不使用别名,默认使用属性名,加了别名,优先级更高,就使用别名的名称
     * name="Student_name"
     */
    @ColumnInfo(name = "name")
    lateinit var name:String

    @ColumnInfo(name = "age")
    var age:Int = 0

    /**
     * 1.次构造调用主构造
     * :this()
     */
    constructor(name:String,age:Int):this()
        this.name = name
        this.age = age
    

2.2数据库访问对象

/**
 * @author XiongJie
 * @version appVer
 * @Package com.gdc.kotlinproject.database
 * @file
 * @Description:
 * (1)@Dao标记数据库的访问对象,即数据库的增删改查
 * @date 2021-6-4 15:24
 * @since appVer
 */

@Dao
interface StudentDao 

    /**
     * 1.可变参数使用
     * vararg students:Student
     */
    @Insert
    fun insertStudents(vararg students:Student)

    @Update
    fun updateStudents(vararg students: Student)

    //1.删除全部
    @Query("DELETE FROM student")
    fun deleteAllStudents()

    //1.查询全部
    @Query("SELECT * FROM student ORDER BY ID DESC")
    fun queryAllStudents() : List<Student>


2.3数据库创建与获取

/**
 * 1.数据表与实体指定
 * java数组: entities = 
 * kt数组:entities = []
 *
 * 2.数据库版本号设置
 * version数据库版本号
 *
 * 3.返回数据库操作Dao
 * Dao是对数据库的增删改查
 *
 * 4.创建数据库与获取数据库
 *
 * 5.需要成为RoomDatabase的子类
 *
 */
@Database(entities = [Student::class],version = 1)
abstract class StudentDatabase : RoomDatabase()

    abstract fun getStudentDao() : StudentDao

    //派生(单例模式)
    companion object
        //1.允许为空
        private var INSTANCE : StudentDatabase ? = null

        /**
         * 2.创建数据库获取数据库
         * (1)给Application使用
         */
        fun getDatabase(context : Context) : StudentDatabase ? 
            if(null == INSTANCE)
                /**
                 * 2.1::class.java是因为room底层是由java产现的,因此需要.java
                 * 如果底层是由kotlin语言编写的,就不需要这么麻烦
                 *
                 * 2.2允许在主线程中运行
                 * allowMainThreadQueries()
                 */
                INSTANCE = Room.databaseBuilder(context,StudentDatabase::class.java,"student_database.db")
                    .allowMainThreadQueries()
                    .build()

            
            return INSTANCE
        

        /**
         * 获取数据库
         */
        fun getDataBase() : StudentDatabase? = INSTANCE
    


3.打赏鼓励

感谢您的细心阅读,您的鼓励是我写作的不竭动力!!!

3.1微信打赏

3.2支付宝打赏

以上是关于06Kotlin项目实操之Room数据库的主要内容,如果未能解决你的问题,请参考以下文章

08Kotlin项目实操之收藏业务

07Kotlin项目实操之Navigation使用

10Kotlin项目实操之首页模块

10Kotlin项目实操之首页模块

10Kotlin项目实操之首页模块

08Kotlin项目实操之收藏业务