前段时间项目中有一个比较简单的收藏功能,鉴于需求简单就准备直接用第三方了,同事说这个很好用,索性项目中就使用了Sugar.下面总结一下Sugar的基本使用。

1.在项目的build.gradle中注入Sugar所需的依赖

compile 'com.github.satyan:sugar:1.5'

2.在项目的.AndroidManifest.xml中配置相关参数

 <!--Sugar数据库配置-->
//创建的数据库db的文件名,将在/data/data/{你的应用包名}/databases下创建对应的文件 <meta-dataandroid:name="DATABASE"android:value="你的数据库操作类所在的文件夹目录" />
//数据库版本号 <meta-dataandroid:name="VERSION"android:value="2" />
//是否允许SugarORM记录log <meta-dataandroid:name="QUERY_LOG"android:value="${DB_LOGGER}" />
//创建数据库表对应的Bean所在的包的路径 <meta-dataandroid: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对象中有一个Long类型的id,如果你的返回数据对象里面也有一个id,这个id是一个自增长的字段,可以拿来升降序排列,但是这个id也可以直接拿来使用,get/set方法也已经提供,如若直接使用此id,则需要重新用一个字段来当主键自增然后排序。

数据库框架Sugar的使用详解相关推荐

  1. iOS数据库框架 WCDB的使用详解

    WCDB是一个高效.完整.易用的移动数据库框架,基于SQLCipher,支持iOS, macOS和Android. 前几年的项目用到的数据库框架,都是FMDB.从最初的摸索到工具类的封装,也是经历了一 ...

  2. 诊断数据库ODX—数据库框架(基于ISO22901详解)

    文章目录 前言 一.ODX数据库自身架构是什么? 二.ODX数据库架构具体组成部分和含义 总结 前言 车载诊断现阶段应用的诊断数据库大体分为三种: CDD(Vector私有格式): ODX全球通用诊断 ...

  3. androidentity什么用_Android ORM 框架:GreenDao 使用详解(进阶篇)

    前言 在 Android ORM 框架:GreenDao 使用详解(基础篇) 中,我们了解了 GreenDao 的基本使用,本文我们将深入讲解 GreenDao 的使用 . 一.复杂表结构 a, 使用 ...

  4. java集合框架史上最详解(list set 以及map)

    title: Java集合框架史上最详解(list set 以及map) tags: 集合框架 list set map 文章目录 一.集合框架总体架构 1.1 集合框架在被设计时需满足的目标 1.2 ...

  5. mysql数据库定点任务_MySQL数据库Event定时执行任务详解

    一.背景 由于项目的业务是不断往前跑的,所以难免数据库的表的量会越来越庞大,不断的挤占硬盘空间.即使再大的空间也支撑不起业务的增长,所以定期删除不必要的数据是很有必要的.在我们项目中由于不清理数据,一 ...

  6. SQL Server中通用数据库角色权限的处理详解

    SQL Server中通用数据库角色权限的处理详解 前言 安全性是所有数据库管理系统的一个重要特征.理解安全性问题是理解数据库管理系统安全性机制的前提. 最近和同事在做数据库权限清理的事情,主要是删除 ...

  7. 超轻量级DI容器框架Google Guice与Spring框架的区别教程详解及其demo代码片段分享...

    超轻量级DI容器框架Google Guice与Spring框架的区别教程详解及其demo代码片段分享 DI框架 Google-Guice入门介绍 转载于:https://www.cnblogs.com ...

  8. 067:【Django数据库】ORM查询条件详解-range

    [Django数据库]ORM查询条件详解-range range: 判断某个 field 的值是否在给定的区间中.示例代码如下: # views.py文件内容:from datetime import ...

  9. mysql in从数据库取数_MySQL数据库中 where in 用法详解

    本文主要向大家介绍了MySQL数据库中 where in 用法详解,通过具体的内容向大家展现,希望对大家学习MySQL数据库有所帮助. 这里分两种情况来介绍 WHERE column IN (valu ...

最新文章

  1. php date 转换 string_php将时间差转换为字符串提示
  2. 完成登录与注册页面的前端
  3. 浏览器扩展系列————透明浏览器窗口的实现
  4. RabbitMQ安装与初始配置
  5. 【转】OData – the best way to REST–实例讲解ASP.NET WebAPI OData (V4) Service Client
  6. python直方图的拟合_从一组数据python中将两个高斯拟合成直方图
  7. IOT(10)---NB-IOT的物联网十大典型应用场景
  8. 机器学习之路:python 集成分类器 随机森林分类RandomForestClassifier 梯度提升决策树分类GradientBoostingClassifier 预测泰坦尼克号幸存者...
  9. java 键盘输入密码,(JAVA)从键盘输入一批字符,以@结束,按要求加密并输出
  10. 解决“Pip - Fatal error in launcher: Unable to create process using... ”
  11. 国际长途电话区号(中英文名)
  12. 两球体相交,球缺的计算
  13. 第四届IT 2020高端论坛成功举办
  14. php 深度验证18位身份证是否正确,并获取地址,出生日期(时间戳),性别。
  15. 自己怎么压缩js文件?
  16. asp毕业设计——基于asp+access的网上投票系统设计与实现(毕业论文+程序源码)——网上投票系统
  17. js 周期性定时器
  18. 用certbot申请https证书
  19. 第十一届蓝桥杯C++B组国赛最后一周练习(星期一)
  20. cloudflare免费证书_使用百度云加速免费加速你的博客

热门文章

  1. 直播星第二轮招标湖南国科成为大赢家
  2. 【HTML | CSS】纯CSS居然能做出这种效果,一款宝藏网页分享(超详细讲解 | 附源码)
  3. c语言strtol函数用法,strtol_字符串 | Strings_C_参考手册_非常教程
  4. 全球及中国成人奶粉行业研究及十四五规划分析报告
  5. httpd 配置 php,配置httpd支持php
  6. kafka java代码横杠_Apache Beam Kafkaio获取java.lang.illegalargumentException:无法序列化KafkaunBoundedSource...
  7. 娃娃机的冬天来了The winter is coming
  8. Java报表技术POI实战
  9. 《2022大数据产业年度创新技术突破》榜重磅发布丨金猿奖
  10. java正则表达式中的斜杠\