Android數(shù)據(jù)緩存框架內(nèi)置ORM功能使用教程
使用教程如下
配置初始化
Orm.init(this, OrmConfig.Builder() .database("dcache_sample") .tables(Account::class.java) .version(1) .build())
在自定義的Application類的入口加入一行配置,database為數(shù)據(jù)庫名,version從1開始每次遞增1,tables用來配置需要初始化的表,dcache中所有的表需要實現(xiàn)OrmTable接口。
注解詳解
表和列相關(guān)
@Table
此注解配置在OrmTable的實現(xiàn)類的類名之上,用來指定一個類映射到表的名稱
@Column
此注解配置在OrmTable的實現(xiàn)類的成員屬性之上,用來指定一個屬性映射到字段的名稱
@Ignore
此注解的優(yōu)先級高于@Column,配置在OrmTable的實現(xiàn)類的成員屬性之上,配置了此注解的成員屬性,不會作為表的字段進行映射
約束相關(guān)
@NotNull
此注解配置在OrmTable的實現(xiàn)類的成員屬性之上,用來指定這個字段為非空字段
@PrimaryKey
此注解配置在OrmTable的實現(xiàn)類的成員屬性之上,用來指定這個字段為表的主鍵
@Id
此注解配置在OrmTable的實現(xiàn)類的成員屬性之上,作用類似于@PrimaryKey,并
在它的基礎(chǔ)上指定了該字段名為”_id“,相當(dāng)于@PrimaryKey+@Column("_id")
@Unique
此注解配置在OrmTable的實現(xiàn)類的成員屬性之上,表示這個字段的值在這張表中從不重復(fù)
@Default
此注解配置在OrmTable的實現(xiàn)類的成員屬性之上,通過它可以給字段指定默認值
CRUD操作
插入數(shù)據(jù)
DaoFactory.getDao(Account::class.java).insert(Account(generateAccKey(), "D"+generateAccKey(), "P"+generateAccKey()))
insert不僅可以被用來插入單條數(shù)據(jù),也可以插入一個List數(shù)據(jù)
刪除數(shù)據(jù)
val selectOne = DaoFactory.getDao(Account::class.java) .selectOne(QueryBuilder.create().orderBy(OrmTable.INDEX_ID)) if (selectOne != null) { DaoFactory.getDao(Account::class.java).delete(selectOne) }
更新數(shù)據(jù)
DaoFactory.getDao(Account::class.java).update(Account("這個是key", "D"+generateAccKey(), "P"+generateAccKey()))
查詢數(shù)據(jù)
Condition
selection:where子句,不帶where,可以帶”?“占位符
selectionArgs:”?“占位符的所有值
WhereBuilder
where子句的構(gòu)建類,通過WhereBuilder.create ()創(chuàng)建實例
public WhereBuilder addWhereEqualTo(String column, Object value) { return append(null, column + EQUAL_HOLDER, value); }
可以通過調(diào)用addWhereEqualTo添加key=value條件。
QueryBuilder
支持where、orderBy、limit、groupBy等
查詢記錄數(shù)
val count = DaoFactory.getDao(Account::class.java).selectCount()
通過selectCount查詢符合查詢條件的記錄條數(shù)。
其他注意事項
復(fù)雜數(shù)據(jù)類型字段映射
@Convert(converter = StringListConverter.class, columnType = String.class) @Column("acc_child_values") private List<String> accChildValues;
使用@Convert注解可以保存復(fù)雜的數(shù)據(jù)類型,例如ArrayList,一般將復(fù)雜數(shù)據(jù)類型轉(zhuǎn)成格式化后的字符串類型保存到數(shù)據(jù)庫,讀取數(shù)據(jù)的時候進行自動解碼操作。
converter類型轉(zhuǎn)換器可以自行定義,columnType為你保存到數(shù)據(jù)庫的實際數(shù)據(jù)類型。
表結(jié)構(gòu)升級
@Override public boolean isUpgradeRecreated() { return false; }
只需要在配置中將數(shù)據(jù)庫版本提升1,即可自動進行表結(jié)構(gòu)的升級。在OrmTable的實現(xiàn)類重寫isUpgradeRecreated()來確定表升級后是否要清空之前保存的數(shù)據(jù),如果return true,則在表升級后將數(shù)據(jù)清空。
事務(wù)操作
Transaction.execute(Account::class.java) { val selectOne = it.selectOne(QueryBuilder.create().orderBy(OrmTable.INDEX_ID)) if (selectOne != null) { it.delete(selectOne) } }
使用Transaction.execute()可以在代碼塊中執(zhí)行事務(wù)操作,it指代的是OrmDao<Account>。
以上就是Android數(shù)據(jù)緩存框架內(nèi)置ORM功能使用教程的詳細內(nèi)容,更多關(guān)于Android數(shù)據(jù)緩存框架ORM的資料請關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
Android View與Compose互相調(diào)用實例探究
這篇文章主要介紹了Android View與Compose互相調(diào)用,Compose 具有超強的兼容性,兼容現(xiàn)有的所有代碼,Compose 能夠與現(xiàn)有 View 體系并存,可實現(xiàn)漸進式替換2023-01-01Android實現(xiàn)應(yīng)用內(nèi)置語言切換功能
這篇文章主要為大家詳細介紹了Android實現(xiàn)應(yīng)用內(nèi)置語言切換功能,具有一定的參考價值,感興趣的小伙伴們可以參考一下2017-02-02Android使用webView長按保存下載網(wǎng)絡(luò)圖片
這篇文章主要為大家詳細介紹了Android使用webView長按保存下載網(wǎng)絡(luò)圖片,具有一定的參考價值,感興趣的小伙伴們可以參考一下2019-08-08Android應(yīng)用開發(fā)SharedPreferences存儲數(shù)據(jù)的使用方法
SharedPreferences是Android中最容易理解的數(shù)據(jù)存儲技術(shù),實際上SharedPreferences處理的就是一個key-value(鍵值對)SharedPreferences常用來存儲一些輕量級的數(shù)據(jù)2012-11-11GridView基于pulltorefresh實現(xiàn)下拉刷新 上拉加載更多功能(推薦)
原理和listview一樣 ,都是重寫Android原生控件。下面小編通過實例代碼給大家分享GridView基于pulltorefresh實現(xiàn)下拉刷新 上拉加載更多功能,非常不錯,一起看看吧2016-11-11