前言
我们从0开始封了一个面向OC模型的数据库就要结束了,开发工作其实在上一篇就做完了,之后做了一些小的优化以及代码的调整来发布这篇文章,先看一下我们最终形态。
我们支持的类型有:
所有的基本数据类型(int,float),NSNumber,NSArray,NSMutableArray,NSDictionary,NSMutableDictionary,UIImage,NSURL,UIColor,NSSet,NSRange,NSAttributedString,NSData,自定义模型,以及数组、字典、模型相互嵌套复制代码
这篇文章,将全方位介绍我们数据库–CWDB以及如何使用!
架构
类名作用.h需要遵守以及实现的协议方法(用户).h、.m本库操作数据库的所有API(用户).h、.m直接调用底层API的类.h、.m处理模型的工具类.h、.处理数据库表的工具类
在使用前,我们先模拟一个对应的使用场景,要解决什么问题,这个场景也是我们demo中的演示代码所展现的(你可以打开demo在目录下找到它)。
我们希望保存几所学校的资料到数据库。
以上的层级关系有模型嵌套数组嵌套模型的场景、模型嵌套模型再嵌套数据再嵌套模型的场景也就模型直接嵌套模型的场景。
然后我们使用工厂方法来快速构造各个模型jsp用什么数据库好,用来搭建整个学校
学校的结构设定好了之后~我们用代码构造一所所这样的梦想学院。。然后我们要使用我们的数据库将学校的资料保存起来。
How to use CWDB?
1、将CWDB拖进你的项目或者使用(pod ‘CWDB’, ‘~> 1.5.0’),给项目添加.0.tbd库,需要存储进数据库的模型导入.h头文件,然后遵守协议,实现下面这个方法返回对应的主键信息:
+ (NSString *)primaryKey { // 返回schoolId为主键 return @"schoolId";}复制代码
2、为所欲为之为所欲为操作数据库
// 使用工厂方法创建的shool模型CWSchool *school = [self cwSchoolWithID:9999 name:@"梦想学院"]; // 调用保存或者更新方法,uid为userId,对应数据库的名字,targetId为目标ID,与数据库表名相关,可以传nil。BOOL result = [CWSqliteModelTool insertOrUpdateModel:school uid:nil targetId:nil];复制代码
为什么要设置两个多余的参数uid与?为了迎合下面一些场景,如果你不,传nil即可
关于数据库升级以及数据库迁移,假设我存在数据库的数据为聊天记录,里面有10个成员变量,有一天,业务的提升,我要在里面多加一个成员变量,如新增一个成员变量用来标记是否是撤回的消息,这个时候由于数据库的表结构固定死了没这个字段,插入数据肯定是失败的,为了解决这个问题,我们将要进行数据库升级jsp用什么数据库好,并且要将之前的数据都保留下来,这个要怎么做呢?这里压根不需要你思考这个问题,我作为一个负责任的男人,我很负责任的告诉你,假如你的模型新增加了1个2个10个成员变量,你只管加,加了之后只管调用上面的方法存,数据的升级以及迁移我们默认会帮你完成!!!
// result内的元素为CWSchool的模型NSArray *result = [CWSqliteModelTool queryAllModels:[CWSchool class] uid:nil targetId:nil];复制代码
查询方法返回值是一个数组,这个数组里面的数据全部为的模型,因为我们承诺过,保存的时候是模型A,查询出来的一定也是模型A。
CWSchool *school = [self cwSchoolWithID:9999 name:@"梦想学院"];// 删除school数据BOOL result = [CWSqliteModelTool deleteModel:school uid:nil targetId:nil];复制代码
这个方法,会根据传进来的模型的主键值去找到数据表里面的数据删除。
我们的功能基本都在这了,除了还有一些条件查询与删除没写在这里。有人会问,数据库不是增删查改4个吗?怎么你只有3个,我们也实现了改的操作,只是我们把这个操作和增合并成了一个方法,也就是这里的第一个方法,我们会根据主键来判断数据库内是否存在对应的数据,如果存在,我们则进行更新操作,不存在则插入数据。
我们的演示代码对数据库操作提供了一个可视化的操作界面,大概是这样子
当然插入的数据与查询的数据是否对应从界面上是无法看出来的,你可以像我这样打一个断点查看:
关于CWDB的更多用法,请转到:CWDB查看或者看代码提供的API。。如果有不能满足你需求的场景或者有任何疑问,欢迎留言或者提issue,最终看在全校女同学的面子上 give me one star !!
如果你也想封装一个有很多女同学的数据库,但是没有资料学的话,可以前往我之前文章的传送门,每个功能的实现,我们都提供了非常详细的讲解:
从0开始弄一个面向OC数据库(一)
从0开始弄一个面向OC数据库(二)
从0开始弄一个面向OC数据库(三)
从0开始弄一个面向OC数据库(四)
从0开始弄一个面向OC数据库(五)
本文到此结束,希望对大家有所帮助。
本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至81118366@qq.com举报,一经查实,本站将立刻删除。发布者:简知小编,转载请注明出处:https://www.jianzixun.com/93671.html