資料庫框架Sugar的使用

Dale_Dawson發表於2019-04-09

前段時間專案中有一個比較簡單的收藏功能,鑑於需求簡單就準備直接用第三方了,同事說這個很好用,索性專案中就使用了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;
        }
    }
複製程式碼

特別提醒,敲黑板了~

SugarRecord.png

此處可以看見SugarRecord物件中有一個Long型別的id,如果你的返回資料物件裡面也有一個id,這個id是一個自增長的欄位,可以拿來升降序排列,但是這個id也可以直接拿來使用,get/set方法也已經提供,如若直接使用此id,則需要重新用一個欄位來當主鍵自增然後排序。

相關文章