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ù)庫(kù)名,version從1開始每次遞增1,tables用來配置需要初始化的表,dcache中所有的表需要實(shí)現(xiàn)OrmTable接口。
注解詳解
表和列相關(guān)
@Table
此注解配置在OrmTable的實(shí)現(xiàn)類的類名之上,用來指定一個(gè)類映射到表的名稱
@Column
此注解配置在OrmTable的實(shí)現(xiàn)類的成員屬性之上,用來指定一個(gè)屬性映射到字段的名稱
@Ignore
此注解的優(yōu)先級(jí)高于@Column,配置在OrmTable的實(shí)現(xiàn)類的成員屬性之上,配置了此注解的成員屬性,不會(huì)作為表的字段進(jìn)行映射
約束相關(guān)
@NotNull
此注解配置在OrmTable的實(shí)現(xiàn)類的成員屬性之上,用來指定這個(gè)字段為非空字段
@PrimaryKey
此注解配置在OrmTable的實(shí)現(xiàn)類的成員屬性之上,用來指定這個(gè)字段為表的主鍵
@Id
此注解配置在OrmTable的實(shí)現(xiàn)類的成員屬性之上,作用類似于@PrimaryKey,并
在它的基礎(chǔ)上指定了該字段名為”_id“,相當(dāng)于@PrimaryKey+@Column("_id")
@Unique
此注解配置在OrmTable的實(shí)現(xiàn)類的成員屬性之上,表示這個(gè)字段的值在這張表中從不重復(fù)
@Default
此注解配置在OrmTable的實(shí)現(xiàn)類的成員屬性之上,通過它可以給字段指定默認(rèn)值
CRUD操作
插入數(shù)據(jù)
DaoFactory.getDao(Account::class.java).insert(Account(generateAccKey(), "D"+generateAccKey(), "P"+generateAccKey()))
insert不僅可以被用來插入單條數(shù)據(jù),也可以插入一個(gè)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("這個(gè)是key", "D"+generateAccKey(), "P"+generateAccKey()))
查詢數(shù)據(jù)
Condition
selection:where子句,不帶where,可以帶”?“占位符
selectionArgs:”?“占位符的所有值
WhereBuilder
where子句的構(gòu)建類,通過WhereBuilder.create ()創(chuàng)建實(shí)例
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ù)。
其他注意事項(xiàng)
復(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ù)庫(kù),讀取數(shù)據(jù)的時(shí)候進(jìn)行自動(dòng)解碼操作。
converter類型轉(zhuǎn)換器可以自行定義,columnType為你保存到數(shù)據(jù)庫(kù)的實(shí)際數(shù)據(jù)類型。
表結(jié)構(gòu)升級(jí)
@Override public boolean isUpgradeRecreated() { return false; }
只需要在配置中將數(shù)據(jù)庫(kù)版本提升1,即可自動(dòng)進(jìn)行表結(jié)構(gòu)的升級(jí)。在OrmTable的實(shí)現(xiàn)類重寫isUpgradeRecreated()來確定表升級(jí)后是否要清空之前保存的數(shù)據(jù),如果return true,則在表升級(jí)后將數(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功能使用教程的詳細(xì)內(nèi)容,更多關(guān)于Android數(shù)據(jù)緩存框架ORM的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
Android View與Compose互相調(diào)用實(shí)例探究
這篇文章主要介紹了Android View與Compose互相調(diào)用,Compose 具有超強(qiáng)的兼容性,兼容現(xiàn)有的所有代碼,Compose 能夠與現(xiàn)有 View 體系并存,可實(shí)現(xiàn)漸進(jìn)式替換2023-01-01Android實(shí)現(xiàn)應(yīng)用內(nèi)置語(yǔ)言切換功能
這篇文章主要為大家詳細(xì)介紹了Android實(shí)現(xiàn)應(yīng)用內(nèi)置語(yǔ)言切換功能,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2017-02-02Android使用webView長(zhǎng)按保存下載網(wǎng)絡(luò)圖片
這篇文章主要為大家詳細(xì)介紹了Android使用webView長(zhǎng)按保存下載網(wǎng)絡(luò)圖片,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2019-08-08ViewPager實(shí)現(xiàn)漂亮的引導(dǎo)頁(yè)
這篇文章主要為大家詳細(xì)介紹了ViewPager實(shí)現(xiàn)漂亮的引導(dǎo)頁(yè),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2017-08-08Android應(yīng)用開發(fā)SharedPreferences存儲(chǔ)數(shù)據(jù)的使用方法
SharedPreferences是Android中最容易理解的數(shù)據(jù)存儲(chǔ)技術(shù),實(shí)際上SharedPreferences處理的就是一個(gè)key-value(鍵值對(duì))SharedPreferences常用來存儲(chǔ)一些輕量級(jí)的數(shù)據(jù)2012-11-11GridView基于pulltorefresh實(shí)現(xiàn)下拉刷新 上拉加載更多功能(推薦)
原理和listview一樣 ,都是重寫Android原生控件。下面小編通過實(shí)例代碼給大家分享GridView基于pulltorefresh實(shí)現(xiàn)下拉刷新 上拉加載更多功能,非常不錯(cuò),一起看看吧2016-11-11Android 處理 View 重復(fù)點(diǎn)擊的多種方法
這篇文章主要介紹了Android 處理 View 重復(fù)點(diǎn)擊的多種方法,幫助大家更好的理解和學(xué)習(xí)使用Android,感興趣的朋友可以了解下2021-03-03