前段時間專案中有一個比較簡單的收藏功能,鑑於需求簡單就準備直接用第三方了,同事說這個很好用,索性專案中就使用了Sugar.下面總結一下Sugar的基本使用。
1.在專案的build.gradle中注入Sugar所需的依賴
compile 'com.github.satyan:sugar:1.5'
複製程式碼
2.在專案的.AndroidManifest.xml中配置相關引數
<!--Sugar資料庫配置-->
//建立的資料庫db的檔名,將在/data/data/{你的應用包名}/databases下建立對應的檔案
<meta-data
android:name="DATABASE"
android:value="你的資料庫操作類所在的資料夾目錄" />
//資料庫版本號
<meta-data
android:name="VERSION"
android:value="2" />
//是否允許SugarORM記錄log
<meta-data
android:name="QUERY_LOG"
android:value="${DB_LOGGER}" />
//建立資料庫表對應的Bean所在的包的路徑
<meta-data
android:name="DOMAIN_PACKAGE_NAME"
android:value="你的實體類所在的資料夾目錄" />
複製程式碼
3.建立資料庫實體類
相關注解 @Column這個註解意思是說你想強制按照你的規定的名字來建立表中對應的欄位名字,所以這裡的skuId在Goods表中的欄位名就不是預設的sku_id了,而是你自己給的sku_ID @Expoes是來自於Gson的的一個註解,後面會說到 @Ignore這個註解強調這個屬性在表中不要建立對應的欄位
public class SongCollection extends SugarRecord implements Serializable {
private long songId;
private String songName;
private String singerName;
private String picUrl;
private String playUrl;
private long mvId;
複製程式碼
此處物件實體需要繼承SugarRecord,補全get/set方法即可,便於傳物件隨手實現一下Serializable 。
4.相關操作-增刪改查
此處本人用了一個加鎖單例來管理相關操作
public class SongCollectionManager {
private static SongCollectionManager instance;
private SongCollectionManager() {
}
public static SongCollectionManager getInstance() {
if (instance == null) {
synchronized (SongCollectionManager.class) {
if (instance == null) {
instance = new SongCollectionManager();
}
}
}
return instance;
}
複製程式碼
- 增 物件名直接呼叫save()方法即可
public void save(SongCollection songCollection) {
synchronized (Cst.DB_LOCK) {
songCollection.save();
}
}
複製程式碼
- 刪 1.刪除一條資料 物件名直接呼叫delete()方法即可
public void delete(long songId) {
synchronized (Cst.DB_LOCK) {
SongCollection songCollection = SongCollection.findById(SongCollection.class, songId);
songCollection.delete();
}
}
複製程式碼
2.刪除表中所有條目
SongCollection.deleteAll(SongCollection.class)
複製程式碼
- 改 修改相關屬性,然後再次存資料達到修改的效果
SongCollection songCollection = SongCollection.findById(SongCollection.class, songId);
songCollection .setSingerName("Rice");
songCollection .save();
複製程式碼
- 查 通過條件查詢返回一個list
public List<SongCollection> list() {
synchronized (Cst.DB_LOCK) {
List<SongCollection> list = Select.from(SongCollection.class).orderBy("id desc").list();
if (list == null) {
list = new ArrayList<>();
}
return list;
}
}
複製程式碼
- 判斷是否存在 專案中需要判斷某個物件是否存在,故寫了這個方法,一併貼出
public boolean find(long songId) {
synchronized (Cst.DB_LOCK) {
SongCollection songCollection = SongCollection.findById(SongCollection.class, songId);
if (songCollection != null) {
return true;
} else {
return false;
}
}
}
複製程式碼
- 統計總數
private int count() {
synchronized (Cst.DB_LOCK) {
int size = (int) SongCollection.count(SongCollection.class);
return size;
}
}
複製程式碼