Android Sugar ORM (1)

Android Sugar ORM比我之前用过的ORM都要简单许多, 其目的是简化与Android中SQLite数据库的交互, 优点如下:

  • 消除了编写SQL查询以及与SQLite数据库进行交互
  • Sugar ORM负责创建数据库
  • Sugar ORM负责管理对象关系
  • Sugar ORM提供了用户数据库操作的简单清晰的api

Android Sugar ORM 的使用

1. 下载

官方文档上写的是需要在build.gradle中添加, 如果使用的Android Studio, 需要在build.gradle:(Module: app)下的dependencies中添加即可, 官网示例:

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

但是貌似compile已经被弃用了, 现在使用的是implementation, 而且有目前我了解到的, 有1.4和1.5两个版本可以使用

implementation 'com.github.satyan:sugar:1.4'

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

本篇采用的Sugar ORM: 1.5

2. 配置

开始使用Sugar ORM前需要在AndroidManifest.xml中进行简单的配置, 有一个比较需要注意的点, 就是需要设置<application>标签下的android:name属性, 以及几项元数据, 你可以配置为你想要的包, 这时有两种方式, 比如:

  • android:name="com.orm.SugarApp"使用这种方式时, 只需进行配置元数据即可
  • android:name=".App"使用这种方式时需要另外做下面几项修改, 其中.App是任意你自定义的包
<application
android:allowBackup="true"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:roundIcon="@mipmap/ic_launcher_round"
android:supportsRtl="true"
android:theme="@style/AppTheme"
android:name=".App">
<activity android:name=".MainActivity">
<intent-filter>
<action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
<meta-data android:name="DATABASE" android:value="data.db" />
<meta-data android:name="VERSION" android:value="1" />
<meta-data android:name="QUERY_LOG" android:value="true" />
<meta-data android:name="DOMAIN_PACKAGE_NAME" android:value="com.example" />
</application>

元数据标记都是可选的, 用途如下:

元数据 描述
DATABASE 生成的SQLite数据库名称
VERSION 数据库架构的版本
QUERT_LOG 记录日志, true:保存;false:不保存
DOMAIN_PACKAGE_NAME 指定存在域/实体类的包名称

配置完以后会发现android:name=".App"可能会报红, Android Studio下按下Alt+Enter创建App类, 这时候Android Studio会自动生成一个App类继承于Application改为继承于SugarApp, 并重写onCreate()onTerminate():

public class App extends SugarApp {
@Override
public void onCreate() {
super.onCreate();
SugarContext.init(this);
} @Override
public void onTerminate() {
SugarContext.terminate();
super.onTerminate();
}
}

3. 创建一个实体

这里有两种写法

public class Book extends SugarRecord<Book> {
String title;
String edition; public Book(){
} public Book(String title, String edition){
this.title = title;
this.edition = edition;
}
}

在网上搜一些资料, 有的第二种写法是继承的是Model类, 但是我试了后不行, 我改成了继承于SugarRecord类, 试验后发现也可以, 后来查资料发现这个Model可能是SugarRecord.Model, 可能是版本问题, 我用的Sugar ORM: 1.5版本, 发现SugarRecord下并没有Model, 这个还有待研究一下.

@Table(name = "Book")
public class Book extends SugarRecord {
@Column(name = "title")
String title;
@Column(name = "edition")
String edition; public Book(){
} public Book(String title, String edition){
this.title = title;
this.edition = edition;
}
}

4. 基本用法

Sugar ORM执行CRUD操作非常简单, 只需要简单的效用类似于sava(), delete(), findById()这类的方法, 当你存入数据的时候, 会自动生成一个索引, 我们截取SugarRecord的一部分源代码就可以看到会有一个id:

public class SugarRecord {

    public static final String SUGAR = "Sugar";
private Long id = null; private static SQLiteDatabase getSugarDataBase() {
return getSugarContext().getSugarDb().getDB();
} public static <T> int deleteAll(Class<T> type) {
return deleteAll(type, null);
} public static <T> int deleteAll(Class<T> type, String whereClause, String... whereArgs) {
return getSugarDataBase().delete(NamingHelper.toSQLName(type), whereClause, whereArgs);
}
}

值得注意的是这个idlong类型的, 在用的时候应该没有什么太大的问题, 此外官网特别提醒了一下, Sugar ORM的记录索引值是从1开始的

保存实体:

Book book = new Book(ctx, "Title here", "2nd edition")
book.save();

加载实体:

Book book = Book.findById(Book.class, 1);

更新实体:

Book book = Book.findById(Book.class, 1);
book.title = "updated title here";
book.edition = "3rd edition";
book.save();

删除实体:

Book book = Book.findById(Book.class, 1);
book.delete();

批量操作:

// 批量删除
List<Book> books = Book.listAll(Book.class);
Book.deleteAll(Book.class);
// 批量查询
Iterator<User> all = User.findAll(User.class);
while (all.hasNext()){
User next = all.next();
Log.i("Sugar ORM", "onCreate: " + next.toString() + ":"+next.getId()+":"+next.username+":"+next.password);
}

Android SugarORM(1)的更多相关文章

  1. Android SugarORM(4)

    Android Sugar ORM(4) Android Sugar ORM 数据库迁移 据官网描述, Sugar ORM的设计灵感来自与Rails(没用过, 咱也不知道是啥, 以后也许会学到吧)迁移 ...

  2. Android SugarORM(3)

    Android Sugar ORM (3) Android Sugar ORM 查询 我们在此之前介绍了一些关于Sugar ORM的简单操作, 现在我们就查询来具体说一下 Sugar ORM中的fin ...

  3. Android SugarORM(2)

    Android Sugar ORM (2) Android Sugar ORM 实体 1. 创建一个实体类 Sugar ORM在创建一个实体的时候, 仅需要使这个实体类继承于SugarRecord即可 ...

  4. 用SugarORM快速开发需要同步和保存大量数据的Android互联网客户端

    最近开发的一个项目主要有两个特点,这两点也是在项目开发前需要着重去规划解决方案的: 需要和Rest服务端请求大量的数据 同时这些数据本地也要保存到sqlite数据库 对于第一点,目前的Volley.G ...

  5. 最好的5个Android ORM框架

    在开发Android应用时,保存数据有这么几个方式, 一个是本地保存,一个是放在后台(提供API接口),还有一个是放在开放云服务上(如 SyncAdapter 会是一个不错的选择). 对于第一种方式, ...

  6. Android ORM 框架之 greenDAO 使用心得

    前言 我相信,在平时的开发过程中,大家一定会或多或少地接触到 SQLite.然而在使用它时,我们往往需要做许多额外的工作,像编写 SQL 语句与解析查询结果等.所以,适用于 Android 的ORM  ...

  7. 推荐的Android ORM框架

    1. OrmLite OrmLite 不是 Android 平台专用的ORM框架,它是Java ORM.支持JDBC连接,Spring以及Android平台.语法中广泛使用了注解(Annotation ...

  8. 59.Android开源项目及库 (转)

    转载 : https://github.com/Tim9Liu9/TimLiu-Android?hmsr=toutiao.io&utm_medium=toutiao.io&utm_so ...

  9. 最受欢迎的5个Android ORM框架

    在开发Android应用时,保存数据有这么几个方式, 一个是本地保存,一个是放在后台(提供API接口),还有一个是放在开放云服务上(如 SyncAdapter 会是一个不错的选择). 对于第一种方式, ...

随机推荐

  1. T-SQL创建数据库常用方法2020年10月29日20:12:04网课笔记

    2.接口的作用 第一.方便框架的设计.利于团队的开发. 第二.方便项目拓展.高内聚.低耦合. 3.反射 [1]反射的理解:通过读取程序集的信息,找到相关的类型和类型的成员,也可以得到相关的对象.而这种 ...

  2. Quay v3.5.1 部署踩坑

    官方文档好久没更新了 拿来部署了一个最新的软件 把我坑死了 首先你需要一个podman OR docker 官方用podman 本文同 设置 Postgres 官方推荐数据库 $ mkdir -p $ ...

  3. 【分布式技术专题】「Zookeeper中间件」给大家学习一下Zookeeper的”开发伴侣”—Curator-Framework(基础篇)

    CuratorFramework基本介绍 CuratorFramework是Netflix公司开源的一套Zookeeper客户端框架,它作为一款优秀的ZooKeeper客户端开源工具,主要提供了对客户 ...

  4. unittest测试框架

    unittest单元测试框架不仅可以适用于单元测试,还可以适用WEB自动化测试用例的开发与执行,该测试框架可组织执行测试用例,并且提供了丰富的断言方法,判断测试用例是否通过,最终生成测试结果. 一.u ...

  5. 封装OCX

    封装OCX的办法有2种: 1. 使用C++的MFC activex项目生成OCX 2. 使用C#的用户控件生成OCX(.net core好像不支持) 注意:以管理员身份运行Visual Studio ...

  6. k个鸡蛋从N楼层摔,如果确定刚好摔碎的那个楼层,最坏情况下最少要试验x次?

    题目 k个鸡蛋从N楼层摔,如果确定刚好摔碎的那个楼层,最坏情况下最少要试验x次? 换个说法: k个鸡蛋试验x次最多可以检测N层楼.计算出N? 逆向思维和数学公式解. 分析 定义N(k,x) 如果第k个 ...

  7. mysql数据库优化1

    目录 数据库结构的设计优化 1.数据库结构的设计 2.针对大型的数据量提前进行分库和分表 3.分库分表带来的问题 4.表结构设计注意的问题 查询优化 1.查询语句的注意事项 2.应尽量避免在 wher ...

  8. JavaScript创建和获取时间的方法

    一.获取时间常用方法 1.创建时间对象 var time=new Date() //创建当前的时间信息对象 var time1=new Date(2022,1,1,10,25,30) //创建2022 ...

  9. NPOI Excel导入Invalid header signature

    excel是从网页下载或者其他第三方软件导出的解决方法:使用excel打开,另存为2003版的excel,再导入就好了或者保存为 xlsx

  10. SSM框架——thymeleaf学习总结

    本人关于thymeleaf的学习源自: https://www.bilibili.com/video/BV1qy4y117qi 1.thymeleaf的项目搭建 首先创建springboot项目,相关 ...