文档章节

IOS 手机端数据持久框架DPDB 详解

juwenz
 juwenz
发布于 2015/02/25 09:09
字数 1203
阅读 41
收藏 0
点赞 0
评论 0

#项目简介 框架主要解决苹果开发过程中,数据本地持久化问题。开发初期,选用了sqlite,就一直折腾至今,不爱用coredata,或许它更加好用,不过人总有那么点执着,或者说固执,不是吗?废话不多说,开始介绍。 #方法总览

- save:                    //保存或更新对象
- deleteMe;                //删除自身对象
- pk;                      //得到对象主键,默认为-1
+ queryByPk:               //根据主键查询对象
+ saveObjects:;            //批量保存对象
+ deleteAll;               //级连删除对象
+ deleteByPks:;            //批量删除对象,参数是主键数组
+ allObjects;              //查询所有对象
#待添加
+ 条件查询
+ 分页查询
+ 保存文件(包括图片,视频等)

#方法使用说明 此部分不一一讲解每个方法,根据实际项目中对象持久经常遇到的两种情况分别说明,无关联对象和有关联对象。 ##无关联对象 直接上代码讲解简单明了

<!-- NoRelationshipObject.h -->
#import "DPDBObject.h"
@interface NoRelationshipObject : DPDBObject
@property (nonatomic,strong)        NSString *desc;
@property (nonatomic,assign)        NSInteger    aNumber;
@property (nonatomic,assign)        int          aInt;
@property (nonatomic,assign)        float        aFloat;
@property (nonatomic,assign)        double       aDouble;
@end

上面声明了一个无关联对象,如何保存呢,请看下面

<!-- lang: cpp -->
NoRelationshipObject *nrObject = [[NoRelationshipObject alloc] init];
nrObject.desc = @"这是在测试无关联对象";
noObject.aInt = 2012;
// 此处略去其它属性的赋值
//保存到数据库
[noObject save];

如何验证数据库中是否保存成功,打开数据库,查看数据库中是否存在此记录。

##一对一关联对象 新建一个类OneToOneObject

<!-- OneToOneObject.h -->
#import "DPDBObject.h"
@interface OneToOneObject : DPDBObject
@property (nonatomic,strong)        NSString *desc;
@property (nonatomic,strong)        NoRelationshipObject *nrObject;
@end

按照上面方法,创建一个NoRelationshipObject对象nrObject,再实例化一个OneToOneObject对象otoObject

OneToOneObject *otoObject = [[OneToOneObject alloc] init];
otoObject.desc = @"这是在测试一对一关联对象";
otoObject.nrObject = nrObject;
[otoObject save];

一切如你所料,没有任何意外,如何验证保存成功呢,当然可以在数据库中查找对应的记录是否产生,也可以通过程序检测

//接上
NSInteger pk = [otoObject pk];
OneToOneObject *object = [OneToOneObject queryByPk:pk];
if(object){
    //可以打断点验证,也可以写代码验证
}else{
    NSLog(@"验证失败,没有保存成功");
}

没有任何悬念的结束了,接下来将一对多关系的保存; ##一对多关联对象的保存 前两种情况都比较简单,第三种情况就比较复杂了,想了很多方法,包括动态判断类型,配置文件管理,命名判别等等,最后由于种种问题给pass掉了(如果有兴趣可以留言继续探讨这个问题) 还是直接上代码,新建一个类OneToManyObject

<!-- OneToManyObject.h -->
#import "DPDBObject.h"
@interface OneToManyObject : DPDBObject
@property (nonatomic,strong)        NSString *desc;
@property (nonatomic,strong)        NSArray  *nrArrs;
@end

类里面有个集合类型属性,由于无法像JAVA一样显式指定里面的类型,所以在第一次查询的时候不知道如何“包装”得到的数据,所以需要在OneToManyObject.m方法里面加上一个类方法+ (NSDictionary *)collectionTypeInfo;

#import "OneToManyObject.h"
@implementation OneToManyObject
+ (NSDictionary *)collectionTypeInfo
{
    return
    @{
         @"nrArrs":NSStringFromClass([NoRelationshipObject class])
    };
}

相信看到代码已经明白是什么意思了,指定集合类型的元素类型,这下我就明白了,原来里面装的是 NoRelationshipObject对象,那我就按照NoRelationshipObject方法包装。 使用代码如下

OneToManyObject *otmObject = [[OneToManyObject alloc] init];
NSMutableArray *objects = [NSMutableArray array];
for (NSInteger i = 0 ; i < 10 ; i++){
    NoRelationshipObject *nrObject = [[NoRelationshipObject alloc] init];
    nrObject.desc = [NSString stringWithFormat:@"这是在测试无关联对象-%ld",(long)i];
    [objects addObject:nrObject];
}
otmObject.nrArrs = objects;
[otmObject save];

全部搞定,接下来就是验证了,可以参考上面的验证方式进行验证!

#适用的情况 本框架善不完整,有几方面的功能没有实现,

  • 事务支持,整个框架没有涉及到事务处理,如果有这方面业务需要的,要让你们失望了
  • 属性类型修改,对于同一个属性名,有修改属性类型的,暂时没有实现,这个功能后期可能会加入进去 如果对上面两个需求不是很强烈的,可以尝试下哟,有问题欢迎一起探讨!!

#参考&致谢 这个是很重要滴,喝水不忘挖井人,框架的灵感来自sqliteobjectpersistence,从一行一行读里面代码学到了很多东西,它里面的某些功能甚至现在本猿也没有实现,不过对里面频繁计算部分做了优化,用了缓存换取CPU计算,带来的当然是时间上的优势,再次感谢sqliteobjectpersistence作者。

© 著作权归作者所有

共有 人打赏支持
juwenz
粉丝 2
博文 17
码字总数 8203
作品 0
成都
程序员
谷歌Flutter跨平台应用开发SDK迎来首个发行预览版本

谷歌Flutter跨平台应用开发SDK迎来首个发行预览版本 2018-06-22 12:26编辑: 枣泥布丁分类:程序人生来源:程序师 跨平台Google Flutter预览版本 招聘信息: 图像处理及模式识别工程师 C/C+...

枣泥布丁
06/22
0
0
Framework7 3.0.0 beta8 发布,全功能 HTML 框架

Framework7 3.0.0 beta8 已发布。更新内容如下: Phenome 将 object rest spread 语法转换为 Vue/React 组件中的 Object.assign 语法 下载地址: framework7-react.tar.gz framework7-vue.t......

达尔文
06/12
0
0
Core Data 学习笔记 常用链接整理

目录 Core Data 学习笔记(一)框架简介 Core Data 学习笔记(二)被管理对象模型 Core Data 学习笔记(三)被管理对象 Core Data 学习笔记 应用示例 Core Data 学习笔记 常用链接整理 文章 ...

灰大羊
2015/07/31
0
0
移动web页面支持弹性滚动的3个方案

position:fixed 和 overflow:auto 进行简单的布局实现我们需要的效果,而在手机端遇到的问题如下:

同一种调调
2014/07/17
0
0
Framework7 3.0.1 发布,全功能 HTML 框架

Framework7 3.0.1 已发布。更新内容如下: Phenome 组件中的 TypeError 错误 下载地址: framework7-react.tar.gz framework7-vue.tar.gz framework7.tar.gz Source code (zip) Source code ......

达尔文
07/11
0
0
转:基于IOS上MDM技术相关资料整理及汇总

一、MDM相关知识: MDM (Mobile Device Management ),即移动设备管理。在21世纪的今天,数据是企业宝贵的资产,安全问题更是重中之重,在移动互联网时代,员工个人的设备接入企业网络并查...

移动互联百科
2013/10/06
0
0
hbuilder + MUI 编写跨平台移动端app目前发现的优缺点

MUI这套UI框架,对于我这种CSS菜鸟来说,读懂里面的代码确实很难,而且怎么说框架中也存在的一些大坑,我这样的小白,要花上一段时间去学习。相对于react-native 这点的话还是facebook做的好...

Chendj
2015/10/26
0
2
转:一套代码iOS、Android两端运行,Google Flutter意味着什么?

原文:https://www.toutiao.com/a6569388465538990600/?ttfrom=weixin&utmcampaign=clientshare×tamp=1529580533&app=newsarticle&utmsource=weixin&iid=35476649324&utmmedium=toutiao......

鸿蒙无上至尊
06/22
0
0
常见的移动端H5页面开发遇到的坑和解决办法

手机共通问题 问题一:用同等比例的图片在PC机上很清楚,但是手机上很模糊,原因是什么呢? 经研究发现是devicePixelRatio作怪,因为手机分辨率太小,如果按照分辨率来显示网页字会非常小,所以苹果...

webmirror
05/02
0
0
9 大跨平台移动 App 开发工具推荐

如今,移动应用开发已经变得越来越重要,开发人员面临最大的挑战之一就是在多个平台上运行应用程序。最新的应用程序代码支持“一次编写,到处运行”(WORA)的概念,即只要在一个平台上编写代...

mickelfeng
2017/10/19
0
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

JavaEE——JavaScript

声明:本栏目所使用的素材都是凯哥学堂VIP学员所写,学员有权匿名,对文章有最终解释权;凯哥学堂旨在促进VIP学员互相学习的基础上公开笔记。 JavaScript 内置对象 String对象方法: date对象...

凯哥学堂
10分钟前
0
0
Git 远程代码回滚master

方式一(推荐): git revert commit-id 方式二(不推荐):不推荐原因:推送到线上后,其它开发人员需要重新clone git reset --hard commit-id git push origin HEAD --force...

浮躁的码农
10分钟前
0
0
Elasticesearch学习(7)—— ES查询与Java API的对应关系

1、普通查询 类型 ES查询语句 Java查询实现 结果 查询格式 { "query": { "bool": { "must": [], "must_not": [], "should": [], "filter": [] } }, "from": 0, "size": 10, "sort": [] } Que......

叶枫啦啦
11分钟前
4
0
getElementsByClassName()与getElementById()区别

1.document.getElementsByClassName() 返回的是数组 使用:document.getElementsByClassName("className")[0].innerText='具体内容' 2.document.getElementById() 返回的是单个元素 使用:d......

botkenni
21分钟前
0
0
MyBatis入门

一、安装 <dependency> <groupId>org.mybatis</groupId> <artifactId>mybatis</artifactId> <version>x.x.x</version></dependency> 二、从 XML 中构建 SqlSessionFactory String r......

一个yuanbeth
22分钟前
0
0
聊聊spring cloud的LoadBalancerAutoConfiguration

序 本文主要研究一下spring cloud的LoadBalancerAutoConfiguration RibbonAutoConfiguration spring-cloud-netflix-ribbon-2.0.0.RC2-sources.jar!/org/springframework/cloud/netflix/ribb......

go4it
25分钟前
0
0
【转】使用Lombok来优雅的编码

前言 Lombok 是一种 Java™ 实用工具,可用来帮助开发人员消除 Java 的冗长,尤其是对于简单的 Java 对象(POJO)。它通过注解实现这一目的。 正文 添加依赖 在 pom.xml 文件中添加相关依赖:...

HAVENT
27分钟前
0
0
Dubbo 源码解读 —— 可支持序列化及自定义扩展

一、概述 从源码中,我们可以看出来。目前,Dubbo 内部提供了 5 种序列化的方式,分别为 fastjson、Hessian2、Kryo、fst 及 Java原生支持的方式 。 针对不同的序列化方式,对比内容如下: 名...

Ryan-瑞恩
35分钟前
0
0
MySQL内存设置—— MySQL server has gone away

set global max_allowed_packet=268435456

一梦心草
44分钟前
0
0
推导式

列表、集合和字典推导式 列表推导式是Python最受喜爱的特性之一。它允许用户方便的从一个集合过滤元素,形成列表,在传递参数的过程中还可以修改元素。形式如下: [expr for val in collect...

火力全開
49分钟前
0
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部