數據庫框架Sugar的使用

前段時間項目中有一個比較簡單的收藏功能,鑑於需求簡單就準備直接用第三方了,同事說這個很好用,索性項目中就使用了Sugar.下面總結一下Sugar的基本使用。android

1.在項目的build.gradle中注入Sugar所需的依賴git

compile 'com.github.satyan:sugar:1.5'
複製代碼

2.在項目的.AndroidManifest.xml中配置相關參數github

<!--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這個註解強調這個屬性在表中不要建立對應的字段bash

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 。gradle

4.相關操做-增刪改查ui

此處本人用了一個加鎖單例來管理相關操做spa

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.刪除表中全部條目code

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,則須要從新用一個字段來當主鍵自增而後排序。
相關文章
相關標籤/搜索