日本免费高清视频-国产福利视频导航-黄色在线播放国产-天天操天天操天天操天天操|www.shdianci.com

學無先后,達者為師

網站首頁 編程語言 正文

Android數據緩存框架內置ORM功能使用教程_Android

作者:dora ? 更新時間: 2022-10-31 編程語言

使用教程如下

配置初始化

Orm.init(this, OrmConfig.Builder()
                .database("dcache_sample")
                .tables(Account::class.java)
                .version(1)
                .build())

在自定義的Application類的入口加入一行配置,database為數據庫名,version從1開始每次遞增1,tables用來配置需要初始化的表,dcache中所有的表需要實現OrmTable接口。

注解詳解

表和列相關

@Table

此注解配置在OrmTable的實現類的類名之上,用來指定一個類映射到表的名稱

@Column

此注解配置在OrmTable的實現類的成員屬性之上,用來指定一個屬性映射到字段的名稱

@Ignore

此注解的優先級高于@Column,配置在OrmTable的實現類的成員屬性之上,配置了此注解的成員屬性,不會作為表的字段進行映射

約束相關

@NotNull

此注解配置在OrmTable的實現類的成員屬性之上,用來指定這個字段為非空字段

@PrimaryKey

此注解配置在OrmTable的實現類的成員屬性之上,用來指定這個字段為表的主鍵

@Id

此注解配置在OrmTable的實現類的成員屬性之上,作用類似于@PrimaryKey,并

在它的基礎上指定了該字段名為”_id“,相當于@PrimaryKey+@Column("_id")

@Unique

此注解配置在OrmTable的實現類的成員屬性之上,表示這個字段的值在這張表中從不重復

@Default

此注解配置在OrmTable的實現類的成員屬性之上,通過它可以給字段指定默認值

CRUD操作

插入數據

DaoFactory.getDao(Account::class.java).insert(Account(generateAccKey(),
                    "D"+generateAccKey(), "P"+generateAccKey()))

insert不僅可以被用來插入單條數據,也可以插入一個List數據

刪除數據

val selectOne = DaoFactory.getDao(Account::class.java)
                    .selectOne(QueryBuilder.create().orderBy(OrmTable.INDEX_ID))
            if (selectOne != null) {
                DaoFactory.getDao(Account::class.java).delete(selectOne)
            }

更新數據

DaoFactory.getDao(Account::class.java).update(Account("這個是key",
                    "D"+generateAccKey(), "P"+generateAccKey()))

查詢數據

Condition

selection:where子句,不帶where,可以帶”?“占位符

selectionArgs:”?“占位符的所有值

WhereBuilder

where子句的構建類,通過WhereBuilder.create?()創建實例

public WhereBuilder addWhereEqualTo(String column, Object value) {
        return append(null, column + EQUAL_HOLDER, value);
    }

可以通過調用addWhereEqualTo添加key=value條件。

QueryBuilder

支持where、orderBy、limit、groupBy等

查詢記錄數

val count = DaoFactory.getDao(Account::class.java).selectCount()

通過selectCount查詢符合查詢條件的記錄條數。

其他注意事項

復雜數據類型字段映射

@Convert(converter = StringListConverter.class, columnType = String.class)
@Column("acc_child_values")
private List<String> accChildValues;

使用@Convert注解可以保存復雜的數據類型,例如ArrayList,一般將復雜數據類型轉成格式化后的字符串類型保存到數據庫,讀取數據的時候進行自動解碼操作。

converter類型轉換器可以自行定義,columnType為你保存到數據庫的實際數據類型。

表結構升級

  @Override
  public boolean isUpgradeRecreated() {
      return false;
  }

只需要在配置中將數據庫版本提升1,即可自動進行表結構的升級。在OrmTable的實現類重寫isUpgradeRecreated()來確定表升級后是否要清空之前保存的數據,如果return true,則在表升級后將數據清空。

事務操作

Transaction.execute(Account::class.java) {
                val selectOne = 			it.selectOne(QueryBuilder.create().orderBy(OrmTable.INDEX_ID))
                if (selectOne != null) {
                    it.delete(selectOne)
                }
            }

使用Transaction.execute()可以在代碼塊中執行事務操作,it指代的是OrmDao<Account>。

原文鏈接:https://juejin.cn/post/7139760822309355534

欄目分類
最近更新