您的位置:

Jetpack Room:优秀的Android持久化解决方案

一、Jetpack Room是什么

Jetpack Room是Android Jetpack组件中的一员,它是一个SQLite数据库的抽象层,可以帮助Android开发者更容易地使用SQLite。

Jetpack Room与其他ORM(对象关系映射)框架有所不同,它不会想Hibernate或MyBatis一样,将数据表映射到Java POJO类中,而是使用来自Java注解的SQLite查询和表达式,从而减少Java对象与数据库之间的映射关系。

二、使用Jetpack Room的好处

1、类型安全:Jetpack Room使用SQLite语法的同时,又提供了类型安全的查询方式,这可大大减少了在运行时由于拼写错误等问题而导致的错误。

@Query("SELECT * FROM user WHERE age > :minAge")
LiveData<List<User>> getUsersOlderThan(int minAge);

2、易于测试:Jetpack Room支持在内存中运行模式,这可以使测试变得异常方便。

@Dao
public interface UserDao {
  @Insert
  public void insert(User... users);

  @Query("SELECT * FROM User WHERE name LIKE :name")
  public List findByName(String name);

  @Query("SELECT * FROM User")
  public LiveData<List<User>> getAll();
}

  

3、可观察性:Jetpack Room提供了LiveData和RxJava的支持,这使得数据的变化可以很容易地被观察到。

@Dao
public interface UserDao {
  @Insert
  public void insert(User user);

  @Query("SELECT * FROM User WHERE id = :id")
  public LiveData<User> getUserById(int id);

  @Query("SELECT * FROM User WHERE name LIKE :name")
  public LiveData<List<User>> getUsersWithName(String name);
}

三、Jetpack Room的主要组成部分

1、Entity:表示数据表中的表格,一个数据表可以包含多个Entity。

@Entity(tableName = "users")
public class User {
  @PrimaryKey
  public int uid;

  public String firstName;

  public String lastName;
}

2、DAO(Data Access Object):封装了对Entity的操作,是应用程序与Room交互的主要接口。

@Dao
public interface UserDao {
  @Query("SELECT * FROM user")
  List<User> getAll();

  @Query("SELECT * FROM user WHERE uid = :uid")
  User getById(int uid);

  @Insert
  void insert(User user);

  @Delete
  void delete(User user);
}

3、Database:表示整个数据库,可以包含多个数据表和多个Entity。

@Database(entities = {User.class}, version = 1)
public abstract class AppDatabase extends RoomDatabase {
  private static final String DB_NAME = "myappdatabase.db";
  private static AppDatabase instance;

  public static synchronized AppDatabase getInstance(Context context) {
    if (instance == null) {
      instance = Room.databaseBuilder(context.getApplicationContext(),
          AppDatabase.class, DB_NAME)
          .fallbackToDestructiveMigration()
          .build();
    }
    return instance;
  }

  public abstract UserDao userDao();
}

四、Jetpack Room的使用示例

1、添加Jetpack Room到App的依赖中

dependencies {
    implementation "androidx.room:room-runtime:$room_version"
    annotationProcessor "androidx.room:room-compiler:$room_version"
}

2、定义Entity和DAO

假设我们要创建一个数据表,并将其中一列设置为主键,可以像下面这样写代码:

@Entity(tableName = "users")
public class User {
    @PrimaryKey
    public int id;

    public String name;

    public int age;
}

@Dao
public interface UserDao {
    @Query("SELECT * FROM users")
    List<User> getAll();

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

3、构建Database

我们使用Room.databaseBuilder()自定义了AppDatabase类并对其进行了初始化:

@Database(entities = {User.class}, version = 1)
public abstract class AppDatabase extends RoomDatabase {
    public abstract UserDao userDao();
}

AppDatabase db = Room.databaseBuilder(getApplicationContext(),
    AppDatabase.class, "database-name").build();

4、对数据进行操作

使用已经定义好的Dao对数据进行操作:

UserDao userDao = db.userDao();
User user = new User();
user.id = 1;
user.name = "Test";
user.age = 25;
userDao.insertAll(user);
List<User> users = userDao.getAll();

五、结论

Jetpack Room为Android app提供了一种方便易用的SQLite数据库操作组件,它不仅提高了开发效率,还保证了代码的可测性和可维护性。

Jetpack Room:优秀的Android持久化解决方案

2023-05-19
使用Android Room实现数据持久化存储

2023-05-14
jetpack组件详解

2023-05-19
学习Android Room数据库操作指南

在 Android 应用程序中,数据存储是无法避免的。你需要在你的应用程序中存储和管理用户数据。Android 为开发者提供了不同类型的存储选项,包括 Shared Preferences、文件存储、

2023-12-08
提升用户体验的应用支持库:Android Jetpack

2023-05-14
AndroidX:简化Android项目依赖管理

2023-05-14
离线UI开发:Android Jetpack Compose

2023-05-14
Android应用数据持久化方案

在Android应用中,数据持久化是非常重要的一部分。这是因为Android应用通常需要在用户退出应用后仍然可以保持数据,这对于用户来说非常重要。在本文中,我们将介绍Android中的数据持久化的各种

2023-12-08
印象笔记记录java学习(Java成长笔记)

2022-11-12
为知笔记私有化部署

2023-05-21
java方法整理笔记(java总结)

2022-11-08
让你的Android应用数据持久化——序列化快速入门

2023-05-14
RxLifecycle详解

2023-05-17
UniappAndroid:一站式跨平台移动应用开发解决方案

2023-05-14
java优秀员工推荐(优秀员工怎么推荐)

2022-11-12
java学习笔记(java初学笔记)

2022-11-14
Nvidia NX开发全解析

2023-05-22
java第九天笔记,java第九章

2022-11-20
androiddevtools——完美支持Android开发

2023-05-21
提高企业人力资源效率,轻松招聘优秀人才的解决方案

2023-05-12