3 Star 1 Fork 0

OwenJu / DoPersistenceFramework

加入 Gitee
与超过 1200万 开发者一起发现、参与优秀开源项目,私有仓库也完全免费 :)
免费加入
克隆/下载
贡献代码
同步代码
取消
提示: 由于 Git 不支持空文件夾,创建文件夹后会生成空的 .keep 文件
Loading...
README
MIT

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

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

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

<!-- 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作者。

The MIT License (MIT) Copyright (c) 2015 juwenz Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.

简介

苹果开发本地持久化框架 展开 收起
Objective-C
MIT
取消

发行版

暂无发行版

贡献者

全部

近期动态

加载更多
不能加载更多了
Objective-C
1
https://gitee.com/juwenz/DoPersistenceFramework.git
git@gitee.com:juwenz/DoPersistenceFramework.git
juwenz
DoPersistenceFramework
DoPersistenceFramework
master

搜索帮助