数据库Room之概要(译)

2018-09-05  本文已影响0人  kingkingruan

原文链接:https://developer.android.com/training/data-storage/room/?hl=zh-cn
文章非直译,因为之前直译过一次,回头单独去看发现不太连贯也不符合我们国人的思路。当然,可能是我翻译水平有限,但为了让翻译后的文章能更具可读性,决定在本人的理解上去翻译文章。下面就进入到本章的主题----Room。

Room基于SQLite提供了一层抽象层,使其不仅保留了原先SQLite的功能,并且使得访问数据库更加方便。
如果你的应用中有很多结构化的数据需要保存到本地,那么Room是非常适合在这种场景下使用的。最常见的例子就是需要缓存一些数据,这样的话当用户在没有网络的时候也能浏览数据,在恢复网络后可以把一些数据同步到服务端,这样就会拥有非常好的用户体验。
正因为Room已经为你提供那么强大的功能,所以我们强烈建议你使用Room,而不是SQLite。当然了,如果你依然更愿意直接通过SQLite的API来完成存储功能,可以读使用SQLite保存数据
在Room中主要有如下三个组件:

@Entity
public class User {
    @PrimaryKey
    private int uid;

    @ColumnInfo(name = "first_name")
    private String firstName;

    @ColumnInfo(name = "last_name")
    private String lastName;

    // 为了简单起见省略了Getters和Setters方法,
    // 但是他们是必须的.
}

UserDao.java

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

    @Query("SELECT * FROM user WHERE uid IN (:userIds)")
    List<User> loadAllByIds(int[] userIds);

    @Query("SELECT * FROM user WHERE first_name LIKE :first AND "
           + "last_name LIKE :last LIMIT 1")
    User findByName(String first, String last);

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

    @Delete
    void delete(User user);
}

AppDatabase.java

@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();

备注:在初始化AddDatabase对象时,最好使用单例模式,因为每创建一个RoomDatabase对象都是非常耗资源的,而且你很少有必要需要多个实例。

如果你现在就想要体验下Room,可以进入Android Room with a ViewAndroid Persistence。想看Room示例代码,见Android Components Smaples

上一篇下一篇

猜你喜欢

热点阅读