Room Persistence Library 是 Google 提供的用于简化 Android SQLite 数据库操作的库。它是在 SQLite 数据库之上构建的一个抽象层,提供了更高级、更便捷的方式来处理数据库操作,同时利用编译时检查来减少错误。
Room 提供了三个主要组件:
Entity(实体): 用于定义数据库表结构的 Java 类。每个实体类代表数据库中的一个表,并且类的字段对应表中的列。
@Entity public class User { @PrimaryKey public int id; public String name; public int age; }
DAO(Data Access Object): 定义访问数据库的方法。DAO 是一个接口或抽象类,其中的方法用于执行数据库的增删改查操作。
@Dao public interface UserDao { @Insert void insert(User user); @Update void update(User user); @Delete void delete(User user); @Query("SELECT * FROM user WHERE id = :userId") User getUserById(int userId); @Query("SELECT * FROM user") List<User> getAllUsers(); }
Database(数据库): 包含数据库持有者,并作为应用的主要接入点。该类负责创建和管理数据库以及提供 DAO 的实例。
@Database(entities = { User.class}, version = 1) public abstract class AppDatabase extends RoomDatabase { public abstract UserDao userDao(); }
使用 Room 时的一般步骤:
创建实体类: 使用
@Entity
注解定义数据表结构。创建 DAO 接口: 使用
@Dao
注解定义数据库操作方法。创建数据库类: 使用
@Database
注解定义数据库,并声明包含的实体类和版本号。获取数据库实例: 通过 Room 的
Room.databaseBuilder()
方法或者Room.inMemoryDatabaseBuilder()
方法构建数据库实例。执行数据库操作: 通过数据库实例获取相应的 DAO 实例,然后调用 DAO 方法执行数据库操作。
以下是一个简单的 Room 示例:
// 创建数据库实例
AppDatabase db = Room.databaseBuilder(context, AppDatabase.class, "my-database").build();
// 获取 UserDao 实例
UserDao userDao = db.userDao();
// 插入用户
User user = new User();
user.id = 1;
user.name = "John";
user.age = 25;
userDao.insert(user);
// 查询用户
User retrievedUser = userDao.getUserById(1);
// 更新用户
retrievedUser.age = 26;
userDao.update(retrievedUser);
// 删除用户
userDao.delete(retrievedUser);
// 查询所有用户
List<User> allUsers = userDao.getAllUsers();
通过使用 Room,开发者可以更方便地进行数据库操作,而且 Room 还提供了一些方便的特性,比如支持 LiveData,简化异步操作等。