android jetpack room文章一

此文,为room的第一篇随笔,记录room的基础使用方式。后续还会记录一些补充的内容。

app.gradle导入库:

dependencies {
    // 当前 targetSdk 32
    // API 33 可以使用2.5.0
    def room_version = "2.4.3"
    implementation "androidx.room:room-runtime:$room_version"
    annotationProcessor "androidx.room:room-compiler:$room_version"
}

构建表单对象:

@Entity(tableName = "teacher_table")
public class Teacher {

    @PrimaryKey(autoGenerate = true)
    public int id;

    @ColumnInfo(name = "name")
    public String name;

    @ColumnInfo(name = "age")
    public String age;

    public static Teacher[] getTeachers() {
        Teacher[] teachers = new Teacher[1000];
        for (int i = 0; i < teachers.length; i++) {
            Teacher teacher = new Teacher();
            teacher.name = "老师" + i;
            teacher.age = "岁:" + i;
            teachers[i] = teacher;
        }
        return teachers;
    }
}

构建Dao对象(读、写数据库的类):

@Dao
public interface TeacherDao {

    // 向表中,插入数据
    @Insert
    void insetTeachers(Teacher... teachers);

    // 删除所有数据
    @Query("delete from teacher_table")
    void deleteAllTeachers();

    // 查看所有数据
    @Query("select * from teacher_table order by id")
    DataSource.Factory<Integer, Teacher> getAllTeachers();
}

构建数据库对象:

@Database(
        entities = {Teacher.class},
        version = 1,
        exportSchema = false
)
public abstract class AppDatabase extends RoomDatabase {
    private static final String DB_NAME = "swalkaDb";
    private static volatile AppDatabase instance = null;
    public static AppDatabase getInstance(Context appContext) {
        if (null == instance) {
            synchronized (AppDatabase.class) {
                if (null == instance) {
                    instance = Room.databaseBuilder(
                            appContext,
                            AppDatabase.class,
                            DB_NAME
                    )
                            // 允许在主线程创建数据库。一般不建议在主线程构建数据库
                            .allowMainThreadQueries()
                            .build();
                }
            }
        }
        return instance;
    }
    public abstract TeacherDao teacherDao();
}

Activity中使用:

// 构建/打开 数据库。建议在子线程中使用
AppDatabase appDatabase = AppDatabase.getInstance(getApplicationContext());
// 获取到操作类
TeacherDao dao = appDatabase.teacherDao();
// TODO 开始数据库操作,在子线程操作数据库

 

备注:

1、代码由Java实现,如果是 kotlin,在 gradle 导入时,需要先导入 kapt 插件(可在往期随笔中查看如何导入 kapt 插件),同时修改 annotationProcessor 为 kapt

2、此笔记为单表结构,后续会发出关联表结构

 

posted @ 2023-01-18 02:23  swalka`x  阅读(32)  评论(0编辑  收藏  举报