Android基础知识之Room教程

1.背景简介

ORM数据库很多,如ormlite,activeorm,greenDao等等。Google也出了一款 room,对比了下orm数据库,网上也对比了room与其他orm框架的性能。

2.Room三大组件

  • Database: 可以使用此组件创建数据库 holder,注释定义实体列表,和类的内容定义数据访问对象(DAO)数据库中的表。它也是基本连接的主要访问点。
  • Entity: 实体类对象模型,一般一一对应表结构。实体的每个字段在数据库中都是保存的,除非你用@Ignore 注解。
  • DAO: 数据库操作接口,一般一一对应表的相关操作

3.android studio gradle配置

在android build.gradle 中配置相应的依赖。

implementation "android.arch.persistence.room:runtime:1.0.0"
annotationProcessor "android.arch.persistence.room:compiler:1.0.0"

4.代码实现

1.UserEntity

@Entity(tableName = "user_information_test")
public class UserEntity {
    @PrimaryKey
    private int uid;

    @ColumnInfo(name = "username")
    private String userName;

    @ColumnInfo(name = "gender")
    private String gender;

    @ColumnInfo(name = "age")
    private int age;

    public int getUid() {
        return uid;
    }

    public void setUid(int uid) {
        this.uid = uid;
    }

    public String getUserName() {
        return userName;
    }

    public void setUserName(String userName) {
        this.userName = userName;
    }

    public String getGender() {
        return gender;
    }

    public void setGender(String gender) {
        this.gender = gender;
    }

    public int getAge() {
        return age;
    }

    public void setAge(int age) {
        this.age = age;
    }

    public User(int uid, String userName, String gender, int age) {
        this.uid = uid;
        this.userName = userName;
        this.gender = gender;
        this.age = age;
    }

2.Dao实现数据库的操作

@Dao
public interface UserDao {

    @Query("select * from user_information_test")
    List<User> getAll();

    @Query("select * from user_information_test where :userName")
    List<User> getUserByName(String userName);

    @Insert()
    void insertAll(User... users);

    @Insert()
    void insertList(List<User> userLists);

    @Update()
    void updateNameByUid(String uid);
}

3.database

@Database(entities = {User.class}, version = 1, exportSchema = false)
public abstract class AppDataBase extends RoomDatabase {
    public abstract UserDao getUserDao();
}

4.MainActivity.class

  AppDataBase appDataBase = Room.databaseBuilder(getApplicationContext(), AppDataBase.class, "/sdcard/user_information_test.db").build();
                UserDao userDao = appDataBase.getUserDao();
                for (int index = 3; index < 10003; index++) {
                    userDao.insertAll(new User(index, "refresh man", "male", 40));
                }

5.注意事项

指的注意的是:

  • “/sdcard/user_information_test.db”,若指定了路径则就保存到对应的路径,若没有则保存到data目录下。
  • 不要表中套表操作
  • 注意条件查找的格式 “:+字段”
  • 数据库迁移升级,该怎么操作?

参考

  1. Room官方依赖
  2. 性能对比
  3. Room ORM 数据库框架
  4. Android流行ORM框架性能对比及Room踩坑总结

邀请你加入,我们一起免费成长,改变只需一秒钟
在这里插入图片描述

你可能感兴趣的:(Android)