zoukankan      html  css  js  c++  java
  • Jetpack学习-Room

    个人博客

    http://www.milovetingting.cn

    Jetpack学习-Room

    Room是什么

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

    以上内容来自官方文档。用一句话总结下:Room是基于SQLite封装的一个框架。

    简单使用

    引入Room

    在需要使用的模块的build.gradle中增加以下配置:

    dependencies {
        //...
        def room_version = "2.2.3"
        implementation "androidx.room:room-runtime:$room_version"
        annotationProcessor "androidx.room:room-compiler:$room_version"
    }
    

    room_version最新可用的版本可以在官方的文档上查看。

    Entity

    //@Entity标识这个类用于建表
    @Entity
    public class Student {
    
        //@PrimaryKey:主键,autoGenerate:是否自增长
        @PrimaryKey(autoGenerate = true)
        public int id;
    
        //@ColumnInfo:表中的字段,name:表中的字段名
        @ColumnInfo(name = "name")
        public String name;
    
        //@ColumnInfo:表中的字段,默认用下面的字段名age
        @ColumnInfo
        public int age;
    }
    

    Dao

    @Dao
    public interface StudentDao {
    
        @Insert
        void insert(Student... students);
    
        @Delete
        void delete(Student student);
    
        @Update
        void update(Student student);
    
        @Query("select * from student")
        List<Student> getAll();
    
        @Query("select * from student where name = :name")
        List<Student> findByName(String name);
    
        @Query("select * from student where id in (:ids)")
        List<Student> findByIds(int[] ids);
    
    }
    

    通过@Dao来标识这是一个Dao,在编译时会通过APT生成具体的实现类。@Insert,@Delete,@Update,@Query同理。

    DataBase

    @Database(entities = {Student.class}, version = 1)
    public abstract class DataBase extends RoomDatabase {
    
        public abstract StudentDao studentDao();
    }
    

    使用

    DataBase dataBase = Room.databaseBuilder(getApplicationContext(), DataBase.class, "room").build();
    StudentDao dao = dataBase.studentDao();
    List<Student> students = dao.getAll();
    

    以上只介绍了最基本的使用步骤,有关数据库升级多表关联查询部分字段等,可以在官方文档上查看。

    原理

    上面使用的过程中,大量用到了注解,可以推测出,Room是通过注解处理器来辅助生成所需要的类文件,具体原理这里不再展开,还是比较简单的(其实是我不想写_)。

  • 相关阅读:
    运维笔记--docker容器部署mongodb 数据持久化
    odoo开发学习-debug&开发者模式 取消
    python开发 -- 批量修改文件后缀名为指定格式
    python开发 -- 判断文件编码格式是否为UTF8 有/无BOM格式
    odoo开发学习 -- 模块目录结构
    odoo开发学习 -- Python2 or Python3?关于环境搭建的软件版本选择
    odoo开发学习 --一点题外话
    odoo各版本新特性及变更记录 --持续更新
    odoo开发学习 -- odoo12 Docker镜像制作
    odoo开发学习--saas环境搭建(一)
  • 原文地址:https://www.cnblogs.com/milovetingting/p/12715506.html
Copyright © 2011-2022 走看看