FinalDB 為 Android orm 框架其中一種,其最大的好處在於能夠一行完成CRUD操作,這也是當初選擇它的原因,但現在年久失修加上一些缺點,不得不另循其他orm框架(Android Room使用紀錄)。
以下紀錄簡單的使用技巧
1.加入專案相依性
1-1.到 https://github.com/yangfuhai/afinal/tree/master/bin 下載jar檔(afinal_0.5_bin.jar)
1-2.將下載的jar檔放到 App module 的 libs 目錄中
1-3.在App module的build.gradle加入
...
dependencies {
...
implementation files('libs/afinal_0.5_bin.jar')
}
2.使用方式
2-1.取得DataBase操作實體
FinalDb.create(context, "test.db", true);
回傳的實體即可進行CRUD操作,context為application context實體,test.db為資料庫名稱,true為啟動debug模式,進行CRUD操作會顯示相關訊息。
以下建立FinalDBWrapper來包裝finalDb
public class FinalDBWrapper {
public static final FinalDb DB_INSTANCE = FinalDb.create(SingletonApplication.getInstance(), "test.db", true);
}
之後只要透過FinalDBWrapper.DB_INSTANCE來操作即可。
2-2.要儲存的類別
import net.tsz.afinal.annotation.sqlite.Id;
import net.tsz.afinal.annotation.sqlite.Table;
@Table(name = "Reminder")
public class Reminder {
@Id
private String listNumber;
private String time;
private boolean isLaunch;
private boolean isVibrator;
private String description;
public String getListNumber() {
return listNumber;
}
public void setListNumber(String listNumber) {
this.listNumber = listNumber;
}
public String getTime() {
return time;
}
public void setTime(String time) {
this.time = time;
}
public boolean getIsLaunch() {
return isLaunch;
}
public void setIsLaunch(boolean isLaunch) {
this.isLaunch = isLaunch;
}
public String getDescription() {
return description;
}
public void setDescription(String description) {
this.description = description;
}
public boolean getIsVibrator() {
return isVibrator;
}
public void setIsVibrator(boolean vibrator) {
isVibrator = vibrator;
}
}
第5行標示資料表名稱。
第8行指定主鍵(不可重複)。
第15~53行為必須有的setter and getter
注意要儲存的類別內無法內嵌另一個自定義類別。e.g.,
public class PatrolReminder {
...
private CustomClass customClass;
}
public class CustomClass{...}
目前似乎還無法這麼做。
2-3. Insert 資料
Reminder reminder = new Reminder();
reminder.setListNumber("0");
FinalDBWrapper.DB_INSTANCE.save(reminder);
第3行插入主鍵為0的reminder,主鍵不可重複。
2-4. Query資料
public static List<Reminder> queryAllReminders() {
return FinalDBWrapper.DB_INSTANCE.findAll(Reminder.class);
}
public static List<Reminder> queryListNumberEqual20(){
String searchMessage = " listNumber=\"" + "20" + "\"";
return FinalDBWrapper.DB_INSTANCE.findAllByWhere(Reminder.class, searchMessage);
}
第1~3行取得所有已儲存的Reminder
第6~9行取得listNumber 等於20 的 Reminder
2-5. Update資料
public void update() {
Reminder reminder = new Reminder();
reminder.setListNumber("0");
FinalDBWrapper.DB_INSTANCE.update(reminder);
}
第3行設定主鍵為0,第4行會以傳入的參數取代已儲存主鍵為0資料。
2-6. Delete資料
public void delete() {
Reminder reminder = new Reminder();
reminder.setListNumber("0");
FinalDBWrapper.DB_INSTANCE.delete(reminder);
}
第3行設定主鍵為0,第4行會刪除已儲存主鍵為0資料。