今日觀看別人源碼的時(shí)候偶然間發(fā)現(xiàn)了一個(gè)很好用的數(shù)據(jù)庫神器,在這里分享一下伸刃。
什么是dbflow?
dbflow是Android SQLite ORM的一個(gè)使用注解操控的工具庫逢倍。簡單說就是對(duì)sqlite數(shù)據(jù)庫進(jìn)行操作的一個(gè)java庫捧颅。
ORM(Object-relational mapping),中文翻譯為對(duì)象關(guān)系映射较雕,是一種為了解決面向?qū)ο笈c關(guān)系數(shù)據(jù)庫存在的互不匹配的現(xiàn)象的技術(shù)碉哑。簡單的說,ORM是通過使用描述對(duì)象和數(shù)據(jù)庫之間映射的元數(shù)據(jù)亮蒋,將程序中的對(duì)象自動(dòng)持久化到關(guān)系數(shù)據(jù)庫中扣典。
為什么使用dbflow?
1慎玖、 速度
基于AnnotationProcessing(注解處理器)贮尖,在編譯時(shí)生成代碼,運(yùn)行時(shí)性能優(yōu)良趁怔,通過復(fù)用對(duì)象以及緩存機(jī)制湿硝,得到不錯(cuò)的速度體驗(yàn)。
2润努、 擴(kuò)展性
數(shù)據(jù)表單映射到數(shù)據(jù)對(duì)象关斜,通過該對(duì)象繼承Model類,一般的話繼承BaseModel類就可以任连,對(duì)類內(nèi)成員添加注解生成所需要的表單蚤吹。
3例诀、 查詢語句
如果你使用過greenDao等其他的庫的話随抠,查詢語句都非常接近SQL語句裁着。
4、 基于sqlite
不限制平臺(tái)拱她,有sqlite的地方就可以使用dbflow二驰。
5、 開源
源碼是個(gè)好東西秉沼,有能力的人可以看看桶雀。
https://github.com/Raizlabs/DBFlow
怎么使用dbflow
配置環(huán)境
不管是想學(xué)習(xí)什么東西,環(huán)境就是個(gè)主要東西唬复,那對(duì)于一個(gè)三方庫來說第一步就是導(dǎo)入類庫矗积。
首先在主要的build.gradle中添加maven地址:
allprojects {
repositories {
maven { url "https://jitpack.io" } }
}
其次在基類module中添加依賴:
<pre style="background:#2B2B2B">def dbflow_version = "4.2.4" dependencies { annotationProcessor "com.github.Raizlabs.DBFlow:dbflow-processor:${dbflow_version}" compile "com.github.Raizlabs.DBFlow:dbflow-core:${dbflow_version}" compile "com.github.Raizlabs.DBFlow:dbflow:${dbflow_version}" compile "com.github.Raizlabs.DBFlow:dbflow-rx2:${dbflow_version}" compile "com.github.Raizlabs.DBFlow:dbflow-sqlcipher:${dbflow_version}" }</pre>
如果需要添加kotlin的代碼的話查看上文的源碼地址下方有說明。
使用
在Application中添加init
FlowManager.*init*(this);
創(chuàng)建數(shù)據(jù)庫
@Database(name = DbFlowData.*DBNAME*,version = DbFlowData.*VERSION*)
public class DbFlowData {
public static final String *DBNAME*="DbFlowData";
public static final int *VERSION*=1;
}
使用注解Database敞咧,name數(shù)據(jù)庫名稱 version數(shù)據(jù)庫版本
創(chuàng)建表單
@Table(database = DbFlowData.class)
public class DbFlowModel extends BaseModel {
@PrimaryKey(autoincrement = true) public int id;
@Column public String name;
public int getId() { return id; }
public void setId(int id) { this.id = id; }
public String getName() { return name; }
public void setName(String name) { this.name = name; }
}
使用注解Table database從屬數(shù)據(jù)庫對(duì)象棘捣,表單屬性使用各類注解,PrimaryKey主鍵休建,Colum列乍恐。
注意:這里我們繼承的 BaseModel 是 DBFlow 給我們提供的,是可以不繼承的测砂,差別僅僅增刪改查的操作上有所不同茵烈。
創(chuàng)建完后,點(diǎn)擊Build->make,會(huì)在..\build\generated\source\apt\debug下生成必要代碼砌些。
插入:
創(chuàng)建一個(gè)表單對(duì)象呜投,賦值完,調(diào)用save方法即可插入操作存璃。
DbFlowModel dbFlowModel = new DbFlowModel(); dbFlowModel.name = name; dbFlowModel.save();
刪除:
類似于sql語句的代碼進(jìn)行操作
SQLite.*delete*()
.from(DbFlowModel.class)
.where(DbFlowModel_Table.*id*.eq(id), DbFlowModel_Table.*name*.eq(name))
.execute();
查詢:
這個(gè)有很多復(fù)雜的查詢操作宙彪,想知道詳細(xì)的還是看官方文檔。
List<DbFlowModel> list = SQLite.*select*().from(DbFlowModel.class).queryList();
更新:
都是類似的有巧。
SQLite.*update*(DbFlowModel.class)
.set(DbFlowModel_Table.*name*.eq("PXXXX"))
.where(DbFlowModel_Table.*name*.eq("P0000"))
.execute();
注意:新建表單后释漆,需要對(duì)數(shù)據(jù)庫的version進(jìn)行升級(jí),不然會(huì)報(bào)錯(cuò)的篮迎。
這里主要簡單的介紹一下dbflow的基本使用男图,主要用作分享和記錄一些好用的東西,
感謝閱讀甜橱。
源碼:https://github.com/xiaogoudandan/WilliamApp