Google Architecyure Components 中

作者: 水瓶鱼 | 来源:发表于2018-03-15 13:02 被阅读40次

    Room 是Google新推出的数据库框架,使用注解的方式简化的数据库的操作使用。

    Room中有三个主要的组成部分

    • Entity: 与数据表对应的实体类
    • DAO: 数据库操作层,每一个DAO对应一个Entity
    • Database:数据库,使用注解的方式声明这个数据库中的数据表,和版本号,并且包含产生DAO对象的方法。

    简单实例

    User.java

    @Entity
    public class User {
        @PrimaryKey
        private int uid;
    
        @ColumnInfo(name = "first_name")
        private String firstName;
    
        @ColumnInfo(name = "last_name")
        private String lastName;
    
        // Getters and setters are ignored for brevity,
        // but they're required for Room to work.
    }
    

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

    一般Database需要为单例模式

    以上代码都出自Google官方文档

    @Database注解中 exportSchema 的默认值为true,当 exportSchema 值为true时 需要早 app.gradle 中配置 数据库建表的SQL文件导出位置。导出的文件可用于数据库升级测试。

        javaCompileOptions {
                annotationProcessorOptions {
                    arguments = ["room.schemaLocation": "$projectDir/schemas".toString()]
                }
            }
    

    数据库升级

    数据库办版本升级时如果程序不做任何处理,Room框架将删除低版本的所有数据,重新创建数据库。

    数据库升级的处理方法:

    Room.databaseBuilder(getApplicationContext(), MyDb.class, "database-name")
            .addMigrations(MIGRATION_1_2, MIGRATION_2_3).build();
    
    static final Migration MIGRATION_1_2 = new Migration(1, 2) {
        @Override
        public void migrate(SupportSQLiteDatabase database) {
            database.execSQL("CREATE TABLE `Fruit` (`id` INTEGER, "
                    + "`name` TEXT, PRIMARY KEY(`id`))");
        }
    };
    
    static final Migration MIGRATION_2_3 = new Migration(2, 3) {
        @Override
        public void migrate(SupportSQLiteDatabase database) {
            database.execSQL("ALTER TABLE Book "
                    + " ADD COLUMN pub_year INTEGER");
        }
    };
    

    相关文章

      网友评论

        本文标题:Google Architecyure Components 中

        本文链接:https://www.haomeiwen.com/subject/nmqhqftx.html