Android SugarORM(1)
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);
}
}
值得注意的是这个id
是long
类型的, 在用的时候应该没有什么太大的问题, 此外官网特别提醒了一下, 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)的更多相关文章
- Android SugarORM(4)
Android Sugar ORM(4) Android Sugar ORM 数据库迁移 据官网描述, Sugar ORM的设计灵感来自与Rails(没用过, 咱也不知道是啥, 以后也许会学到吧)迁移 ...
- Android SugarORM(3)
Android Sugar ORM (3) Android Sugar ORM 查询 我们在此之前介绍了一些关于Sugar ORM的简单操作, 现在我们就查询来具体说一下 Sugar ORM中的fin ...
- Android SugarORM(2)
Android Sugar ORM (2) Android Sugar ORM 实体 1. 创建一个实体类 Sugar ORM在创建一个实体的时候, 仅需要使这个实体类继承于SugarRecord即可 ...
- 用SugarORM快速开发需要同步和保存大量数据的Android互联网客户端
最近开发的一个项目主要有两个特点,这两点也是在项目开发前需要着重去规划解决方案的: 需要和Rest服务端请求大量的数据 同时这些数据本地也要保存到sqlite数据库 对于第一点,目前的Volley.G ...
- 最好的5个Android ORM框架
在开发Android应用时,保存数据有这么几个方式, 一个是本地保存,一个是放在后台(提供API接口),还有一个是放在开放云服务上(如 SyncAdapter 会是一个不错的选择). 对于第一种方式, ...
- Android ORM 框架之 greenDAO 使用心得
前言 我相信,在平时的开发过程中,大家一定会或多或少地接触到 SQLite.然而在使用它时,我们往往需要做许多额外的工作,像编写 SQL 语句与解析查询结果等.所以,适用于 Android 的ORM ...
- 推荐的Android ORM框架
1. OrmLite OrmLite 不是 Android 平台专用的ORM框架,它是Java ORM.支持JDBC连接,Spring以及Android平台.语法中广泛使用了注解(Annotation ...
- 59.Android开源项目及库 (转)
转载 : https://github.com/Tim9Liu9/TimLiu-Android?hmsr=toutiao.io&utm_medium=toutiao.io&utm_so ...
- 最受欢迎的5个Android ORM框架
在开发Android应用时,保存数据有这么几个方式, 一个是本地保存,一个是放在后台(提供API接口),还有一个是放在开放云服务上(如 SyncAdapter 会是一个不错的选择). 对于第一种方式, ...
随机推荐
- T-SQL创建数据库常用方法2020年10月29日20:12:04网课笔记
2.接口的作用 第一.方便框架的设计.利于团队的开发. 第二.方便项目拓展.高内聚.低耦合. 3.反射 [1]反射的理解:通过读取程序集的信息,找到相关的类型和类型的成员,也可以得到相关的对象.而这种 ...
- Quay v3.5.1 部署踩坑
官方文档好久没更新了 拿来部署了一个最新的软件 把我坑死了 首先你需要一个podman OR docker 官方用podman 本文同 设置 Postgres 官方推荐数据库 $ mkdir -p $ ...
- 【分布式技术专题】「Zookeeper中间件」给大家学习一下Zookeeper的”开发伴侣”—Curator-Framework(基础篇)
CuratorFramework基本介绍 CuratorFramework是Netflix公司开源的一套Zookeeper客户端框架,它作为一款优秀的ZooKeeper客户端开源工具,主要提供了对客户 ...
- unittest测试框架
unittest单元测试框架不仅可以适用于单元测试,还可以适用WEB自动化测试用例的开发与执行,该测试框架可组织执行测试用例,并且提供了丰富的断言方法,判断测试用例是否通过,最终生成测试结果. 一.u ...
- 封装OCX
封装OCX的办法有2种: 1. 使用C++的MFC activex项目生成OCX 2. 使用C#的用户控件生成OCX(.net core好像不支持) 注意:以管理员身份运行Visual Studio ...
- k个鸡蛋从N楼层摔,如果确定刚好摔碎的那个楼层,最坏情况下最少要试验x次?
题目 k个鸡蛋从N楼层摔,如果确定刚好摔碎的那个楼层,最坏情况下最少要试验x次? 换个说法: k个鸡蛋试验x次最多可以检测N层楼.计算出N? 逆向思维和数学公式解. 分析 定义N(k,x) 如果第k个 ...
- mysql数据库优化1
目录 数据库结构的设计优化 1.数据库结构的设计 2.针对大型的数据量提前进行分库和分表 3.分库分表带来的问题 4.表结构设计注意的问题 查询优化 1.查询语句的注意事项 2.应尽量避免在 wher ...
- JavaScript创建和获取时间的方法
一.获取时间常用方法 1.创建时间对象 var time=new Date() //创建当前的时间信息对象 var time1=new Date(2022,1,1,10,25,30) //创建2022 ...
- NPOI Excel导入Invalid header signature
excel是从网页下载或者其他第三方软件导出的解决方法:使用excel打开,另存为2003版的excel,再导入就好了或者保存为 xlsx
- SSM框架——thymeleaf学习总结
本人关于thymeleaf的学习源自: https://www.bilibili.com/video/BV1qy4y117qi 1.thymeleaf的项目搭建 首先创建springboot项目,相关 ...