DBflow是android 上使用的比較多的一個(gè)開源數(shù)據(jù)庫(kù),其特點(diǎn)是使用注解完成大部分內(nèi)容的工作。以下是如何在Android 應(yīng)用開發(fā)中使用dbflow,開發(fā)環(huán)境為Android Studio,語言為Java
項(xiàng)目中導(dǎo)入DBflow
-
首先在project的build.gradle中 添加jitpack.io,添加代碼如下:
allProjects { repositories { google() maven { url "https://www.jitpack.io" } } }
-
在module的build.gradle的dependencies中添加dbflow的依賴
def dbflow_version = "4.2.4" dependencies { annotationProcessor "com.github.Raizlabs.DBFlow:dbflow-processor:${dbflow_version}" implementation "com.github.Raizlabs.DBFlow:dbflow-core:${dbflow_version}" implementation "com.github.Raizlabs.DBFlow:dbflow-rx:${dbflow_version}" implementation "com.github.Raizlabs.DBFlow:dbflow:${dbflow_version}" }
新建數(shù)據(jù)庫(kù)和表
接下來開始構(gòu)建數(shù)據(jù)庫(kù)和表。首先創(chuàng)建數(shù)據(jù)庫(kù),代碼如下:
import com.raizlabs.android.dbflow.annotation.Database;
@Database(name = PlanetPlanDB.name, version = PlanetPlanDB.version)
public class PlanetPlanDB {
public static final String name = "planetplan";
public static final int version = 1;
}
其中使用@Database注解定義數(shù)據(jù)庫(kù)的名稱和版本
接著創(chuàng)建一張表,代碼如下
@Table(database = AppDatabase.class)
// 繼承BaseModel可以基于User對(duì)象直接進(jìn)行CRUD操作
public class User extends BaseModel {
@PrimaryKey // at least one primary key required
UUID id;
@Column
String name;
@Column
int age;
}
其中使用@Table 指定database的class為之前創(chuàng)建的database
要在Android App正常使用必須在Application中添加一下代碼:
public class MyApp extends Application {
@Override
public void onCreate() {
super.onCreate();
// 添加該行代碼
FlowManager.init(this);
}
}
以上就完成了表,數(shù)據(jù)庫(kù)的創(chuàng)建,應(yīng)用可以使用dbflow進(jìn)行數(shù)據(jù)的CRUD操作了
數(shù)據(jù)的CRUD
對(duì)User的CRUD操作,代碼如下:
User user = new User();
user.id = UUID.randomUUID();
user.name = "Andrew Grosner";
user.age = 27;
user.insert();// 插入user
user.update();// 更新user
user.delete();// 刪除user
user.save(); // 保存user
// 查詢user
List<User> users = SQLite.select()
.from(User.class)
.where(User_Table.age.greaterThan(18))
.queryList();
以上代碼中:
save() 首先會(huì)判斷數(shù)據(jù)庫(kù)中是否存在user主鍵,如果存在則調(diào)用update(), 如果不存在則調(diào)用insert(). 該部分代碼邏輯在com.raizlabs.android.dbflow.sql.saveable.ModelSaver中實(shí)現(xiàn)
User_Table為dbflow自動(dòng)生成的類,繼承了ModelAdapter類,主要實(shí)現(xiàn)對(duì)User對(duì)象的操作的sql語句等功能
where() 參數(shù)為SQLOperator對(duì)象,SQLOperator為接口,BaseOperator實(shí)現(xiàn)了該接口,com.raizlabs.android.dbflow.sql.language.Operator繼承了BaseOperator, 其中有dbflow支持的operator操作
以上為DBFlow的初步介紹