美文网首页Android架构
Android MVVM设计模式(Room)

Android MVVM设计模式(Room)

作者: JYangkai | 来源:发表于2019-03-26 21:04 被阅读35次

    正文

    今天我们来集成使用jetpack的room

    Room: The Room persistence library provides an abstraction layer over SQLite to allow for more robust database access while harnessing the full power of SQLite.

    这个是官网的描述,简而言之就是使用Room可以更好、更方便、更流畅地访问SQLite数据库

    配置Gradle

    dependencies {
        ...
        // Room
        implementation "androidx.room:room-runtime:2.1.0-alpha06"
        annotationProcessor "androidx.room:room-compiler:2.1.0-alpha06"
    }
    

    我们在Gradle中进行如上配置,之后点击同步按钮,等待同步成功后我们就可以使用Room了

    创建实体(Entity)

    package com.yk.jchat.model.model;
    
    import androidx.room.Embedded;
    import androidx.room.Entity;
    import androidx.room.PrimaryKey;
    
    @Entity
    public class User {
    
        @PrimaryKey(autoGenerate = true)
        private Integer id;
    
        private String nickname;
    
        public Integer getId() {
            return id;
        }
    
        public void setId(Integer id) {
            this.id = id;
        }
    
        public String getNickname() {
            return nickname;
        }
    
        public void setNickname(String nickname) {
            this.nickname = nickname;
        }
    }
    

    @Entity注解用来表示这个类是Room的一个实体
    @PrimaryKey注解用来表示这个属性为主键(autoGenerate = true表示自增长,注意,每个实体类至少有一个主键)

    创建DAO

    package com.yk.jchat.model.dao;
    
    import com.yk.jchat.model.model.User;
    
    import java.util.List;
    
    import androidx.room.Dao;
    import androidx.room.Delete;
    import androidx.room.Insert;
    import androidx.room.OnConflictStrategy;
    import androidx.room.Query;
    import androidx.room.Update;
    
    @Dao
    public interface UserDao {
    
        @Insert(onConflict = OnConflictStrategy.REPLACE)
        void insert(User... users);
    
        @Delete
        void delete(User... users);
    
        @Update(onConflict = OnConflictStrategy.REPLACE)
        void update(User... users);
    
        @Query("SELECT * FROM User WHERE id == :id")
        User queryForId(int id);
    
        @Query("SELECT * FROM User WHERE nickname == :nickname")
        List<User> queryForNickname(String nickname);
    
        @Query("SELECT * FROM User")
        List<User> queryAll();
    
    }
    

    DAO是用来进行数据库操作的,我们只需要相应的方法前加上对应的注解即可,比如

    • @Insert表示插入
    • @Delete表示删除
    • @Update表示更新
    • @Query表示查询

    你可以注意到了有的注解有这样一行语句onConflict = OnConflictStrategy.REPLACE,这个是处理事务冲突的策略,OnConflictStrategy.REPLACE表示用替代,更多策略可以查询官网,还有我们的查询方法可以根据自己的需求编写查询语句。

    创建数据库

    package com.yk.jchat.model.db;
    
    import com.yk.jchat.model.dao.UserDao;
    import com.yk.jchat.model.model.User;
    
    import androidx.room.Database;
    import androidx.room.RoomDatabase;
    
    @Database(entities = {User.class}, version = 1)
    public abstract class AppDatabase extends RoomDatabase {
    
        public abstract UserDao userDao();
    
    }
    

    数据库AppDatabase是个抽象类,它里面新建一个抽象方法userDao(),到这一步我们就可以使用它了,我们先要获取AppDatabase的实例,通常是在Application或一个单例类中获取,因为每获取一次AppDatabase的实例是耗内存的,获取的方法是

    AppDatabase db = Room.databaseBuilder(context, AppDatabase.class, "my_database").build();
    

    获取之后我们就可以进行增删改查操作了,方法如下

    db.userDao().insert(); //增
    db.userDao().delete(); //删
    db.userDao().update(); //改
    db.userDao().queryAll(); //查
    

    好了,Room就介绍到这里,希望大家喜欢。

    相关文章

      网友评论

        本文标题:Android MVVM设计模式(Room)

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