依赖
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)