前段時間項目中有一個比較簡單的收藏功能,鑑於需求簡單就準備直接用第三方了,同事說這個很好用,索性項目中就使用了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;
}
複製代碼
public void save(SongCollection songCollection) {
synchronized (Cst.DB_LOCK) {
songCollection.save();
}
}
複製代碼
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();
複製代碼
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;
}
}
複製代碼