【Android】Room的使用简示

Room的使用简示


依赖

implementation "android.arch.persistence.room:runtime:1.1.1"
annotationProcessor "android.arch.persistence.room:compiler:1.1.1"

Crazy Coding

database

LocalDataBase

@Database(
        version = 1,
        exportSchema = false,
        entities = {DbPerson.class}
)
public abstract class LocalDataBase extends RoomDatabase {
    public abstract DbPersonDao dbPersonDao();
}

daos

DbPersonDao

@Dao
public interface DbPersonDao {
    @Insert(onConflict = OnConflictStrategy.REPLACE)
    long[] insert(List<DbPerson> persons);

    @Insert(onConflict = OnConflictStrategy.REPLACE)
    long insert(DbPerson person);

    @Delete
    void delete(List<DbPerson> passPersonList);

    @Delete
    void delete(DbPerson person);

    @Query("DELETE From Person")
    void deleteAll();

    @Update
    void update(DbPerson person);

    @Query("SELECT * From Person Where person_uuid = :uuid")
    DbPerson selectDbPersonByPersonUuid(String uuid);

    @Query("SELECT * From Person")
    List<DbPerson> selectDbPersonAll();

}

managers

DbManager

public class DbManager {

    private static volatile LocalDataBase db;

    //创建database实例
    public static LocalDataBase init(Context context) {
        if (db == null) {
            //Room和SQLCipher的桥梁
            synchronized (LocalDataBase.class) {
                if (db == null) {
                    //SafeHelperFactory factory = new SafeHelperFactory(KeyManager.getKey().toCharArray());
                    db = Room.databaseBuilder(
                            context.getApplicationContext(),
                            LocalDataBase.class, "local_db.db"
                    )
                            /*.addMigrations(MIGRATION_1_2)*///迁移升级
                            //.openHelperFactory(factory) //打开加密
                            //添加下面这一行
                            //.fallbackToDestructiveMigration()
                            .build();
                }
            }
        }
        return db;
    }

    /*val MIGRATION_1_2: Migration = object : Migration(1, 2) {
        override fun migrate(database: SupportSQLiteDatabase) {
            database.execSQL("ALTER TABLE 'PassPerson' ADD COLUMN 'person_card_no' VARCHAR(20) DEFAULT ''")
        }
    }*/

    public static LocalDataBase getDatabase() {
        return db;
    }

    //获取唯一id
    public static long getUniqueId() {
        return System.nanoTime() << 10;
    }

    //获取唯一字符串
    public static String getUniqueString() {
        return UUID.randomUUID().toString().replace("-", "");
    }
}

DbPersonManager

public class DbPersonManager {
    private static DbPersonDao dbPersonDao() {
        return DbManager.getDatabase().dbPersonDao();
    }

    /*static insert(dbPersons List<DbPerson>) LongArray {
        return dbPersonDao().insert(dbPersons)
    }*/

    public static Long insert(DbPerson dbPerson) {
        return dbPersonDao().insert(dbPerson);
    }

    public static void update(DbPerson dbPerson) {
        dbPersonDao().update(dbPerson);
    }

    public static void delete(DbPerson dbPerson) {
        dbPersonDao().delete(dbPerson);
    }

    public static void delete(List<DbPerson> dbPersonList) {
        dbPersonDao().delete(dbPersonList);
    }

    public static void deleteAll() {
        dbPersonDao().deleteAll();
    }

    public static DbPerson selectDbPersonByPersonUuid(String uuid) {
        return dbPersonDao().selectDbPersonByPersonUuid(uuid);
    }

    public static List<DbPerson> selectDbPersonAll() {
        return dbPersonDao().selectDbPersonAll();
    }
}

mos

@Entity(tableName = "Person")
public class DbPerson {
    @NonNull
    @PrimaryKey
    @ColumnInfo(name = "person_uuid")
    private String personUuid;

    @ColumnInfo(name = "person_attribute")
    private String personAttribute;

    @ColumnInfo(name = "person_image")
    private String personImage;

    @ColumnInfo(name = "feature_status")
    private int featureStatus;

    public DbPerson(String personUuid, String personAttribute, String personImage, int featureStatus) {
        this.personUuid = personUuid;
        this.personAttribute = personAttribute;
        this.personImage = personImage;
        this.featureStatus = featureStatus;
    }

    public String getPersonUuid() {
        return personUuid;
    }

    public void setPersonUuid(String personUuid) {
        this.personUuid = personUuid;
    }

    public String getPersonAttribute() {
        return personAttribute;
    }

    public void setPersonAttribute(String personAttribute) {
        this.personAttribute = personAttribute;
    }

    public String getPersonImage() {
        return personImage;
    }

    public void setPersonImage(String personImage) {
        this.personImage = personImage;
    }

    public int getFeatureStatus() {
        return featureStatus;
    }

    public void setFeatureStatus(int featureStatus) {
        this.featureStatus = featureStatus;
    }

    @Override
    public String toString() {
        return "DbPerson{" +
                "personUuid='" + personUuid + '\'' +
                ", personAttribute='" + personAttribute + '\'' +
                ", personImage='" + personImage + '\'' +
                ", featureStatus=" + featureStatus +
                '}';
    }
}

How To Use

  • 初始化
public class MainApplication extends MultiDexApplication {

    @Override
    public void onCreate() {
        super.onCreate();
        ...
        DbManager.init(this);
    }
    ...
}
  • 调用方法
DbPersonManager.insert(dbPerson)

猜你喜欢

转载自blog.csdn.net/weixin_42473228/article/details/121773445