2019独角兽企业重金招聘Python工程师标准>>>

一、YUDBModel 介绍

  • 架构: 使用runtime和Sqlite实现NSObject扩展类YUDBModel,直接实现(json反序列化对象-对象增删改查数据库-对象序列化)
  • 易用: 无需继承,直接实现序列化、反序列化、一行代码操作数据库
  • 稳定: 耦合度低,容错率高,兼容复杂和特殊数据类型
  • 支持: (NSObject,NSArray,NSDictionary,NSData,NSString,NSNumber,NSURL,Int,double,long,float,Bool,char)类型
  • 灵活: 支持反序列化json key替换,支持自设定主键,支持忽略模型存储字段,支持反序列化代理之定义数据(deserialize()),支持使用Sqlite函数进行查询.
  • 强大: 支持json反序列化对象-对象增删改查数据库-对象序列化,支持模型嵌套存储和多表嵌套复杂查询
  • 智能: 自动增删改表字段,自动初始化空对象(NSObject,NSArray,NSDictionary,NSString)

二、YUDBModel 集成

  • 手动复制《YUDBModel.framework》到工程

  • 使用Cocoapods管理

三、YUDBModel 使用

YUDBModel配置

///设置数据库路径
extern void YUDBModel_SetupDBPath(NSString *path);///设置对象归档路径
extern void YUDBModel_SetupObjectPath(NSString *path);///设置数据库版本号
extern void YUDBModel_SetupDBVersion(NSString *version);///打开日志输出
extern void YUDBModel_SetDBLog(BOOL on);///删除数据库文件
extern BOOL YUDBModel_ClearDBFile();

反序列化

  • DBObj class
struct User {__unsafe_unretained NSString *name;__unsafe_unretained NSString *email;int age;
};@interface BASEDBObj : NSObject
@end@interface DBObj : BASEDBObj@property (copy, nonatomic, readonly) NSNumber *objId;@property (nonatomic, assign, readonly)Point *point;
@property (nonatomic, assign, readonly)struct User *user;
@property (nonatomic, assign, readonly)Method method;
@property (nonatomic, assign, readonly)Ivar ivar;
@property (nonatomic, assign, readonly)Category category;
@property (nonatomic, assign, readonly)objc_property_t property;@property (copy, nonatomic, readonly) void(^Block)(void);
@property (copy, nonatomic, readwrite) id obj;
@property (copy, nonatomic, readwrite) Class classz;
@property (assign, nonatomic, readwrite) SEL sel;@property (copy, nonatomic, readwrite) NSString *name;
@property (copy, nonatomic, readonly) UserInfo *info;
@property (copy, nonatomic, readonly) NSArray *list;@property (copy, nonatomic, readwrite) NSArray *array;
@property (copy, nonatomic, readwrite) NSDictionary *dict;
@property (copy, nonatomic, readwrite) NSData *data;
@property (copy, nonatomic, readwrite) NSDate *date;
@property (copy, nonatomic, readwrite) NSURL *url;
@property (copy, nonatomic, readwrite) NSNumber *number;
@property (copy, nonatomic, readwrite) NSValue *value;@property (copy, nonatomic, readwrite) UIImage *image;
@property (copy, nonatomic, readwrite) UIColor *color;@property (assign, nonatomic, readwrite) char countC;
@property (assign, nonatomic, readwrite) unsigned char countUC;
@property (assign, nonatomic, readwrite) short countS;
@property (assign, nonatomic, readwrite) unsigned short countUS;
@property (assign, nonatomic, readwrite) int countI;
@property (assign, nonatomic, readwrite) unsigned int countUI;
@property (assign, nonatomic, readwrite) long countL;
@property (assign, nonatomic, readwrite) unsigned long countUL;
@property (assign, nonatomic, readwrite) long long countLL;
@property (assign, nonatomic, readwrite) unsigned long long countULL;
@property (assign, nonatomic, readwrite) float countF;
@property (assign, nonatomic, readwrite) double countD;
@property (assign, nonatomic, readwrite) BOOL countB;
@property (assign, nonatomic, readwrite) NSInteger integer;
@property (assign, nonatomic, readwrite) NSUInteger uinteger;@end
  • json
@{@"name":@"BruceYu",@"id":@"0001",@"countF":@"1.6",@"countD":@"1.6",@"countLL":@"6",@"countUL":@"66",@"countULL":@"666",@"countS":@(100),@"countUS":@(99),@"countB":@"1",@"integer":@"1",@"uinteger":@"1",@"countC":@'c',@"countUC":@'c',@"url":@"https://github.com/c6357/YUDBModel",@"dict":@{@"name":@"(null)",@"phone":@"18512345678",@"age":@(66),@"sex":@(1),},@"info":@{@"name":@"bruce",@"phone":@"(null)",@"age":@(66),@"sex":@(1),@"infoLevel1" :         @{@"infoLevel2" :             @{@"infoLevel3" :                 @{@"infoLevel4" :                     @{@"infoLevel5" :                         @{@"infoLevel6" :                             @{@"name6" : @"level6",},@"name5" : @"level5",},@"name4" : @"level4",},@"name3" : @"level3",},@"name2" : @"level2",},@"name1" : @"level1",@"phone1" : @"phone1",},},@"list":@[@{@"name":@"name1",@"phone":@"18500000001",@"age":@(11),@"sex":@(2),},@{@"name":@"(null)",@"phone":@"18500000002",@"age":@(22),@"sex":@(2),},@{@"name":@"name3",@"phone":@"18500000003",@"age":@(33),@"sex":@(3),},],};
///把json转换成对象
DBObj *dbObj = [DBObj modelWithDictionary:json];
/**反序列化JSON需要替换的KEY@return @{@"mode key":@"json key"}*/
+(NSDictionary <NSString *, NSString*> *)YUDBModel_ReplacePropertyKey;/**需要过滤在数据库表中的特殊字段 不储存的字段@return  e.g. return @[@"desrc"]*/
+(NSArray<NSString*> *)YUDBModel_IgnoreFields;/**设置主键@return 主键的 keyName*/
+(NSString*)YUDBModel_PrimaryKey;/**反序列化json自定义操作(通常用于NSArray和特殊处理)@param key key值@param value value值@return 根据key和value返回相应的对象e.g.-(void)deserialize:(NSDictionary *)dictionary{[super deserialize:dictionary arrayParser:^id(NSString *key,id value) {if ([key isEqualToString:@"list"]) {return [UserInfo class];}else if ([key isEqualToString:@"array"]) {return @[@"1",@"2",@"3"];//自定义数组}else if ([key isEqualToString:@"name"]) {return @"自定义名字";}return nil;}];}

序列化

///把对象转换成json
NSDictionary * json = [dbObj dictionary];

数据存储 增、删、改、查

  • 增 改
///直接插入一条数据
[NSObject insert:dbObj];///直接插入多条数据
[NSObject insertObjs:@[dbObj]];///保存一条数据(根据rowid查找 if数据存在更新else插入)
[NSObject save:dbObj];///保存多条数据(根据rowid查找 if数据存在更新else插入)
[NSObject saveObjs:@[dbObj]];///保存一条数据(根据key值条件查找 if数据存在更新else插入)
[NSObject save:dbObj withKey:@"name"];///保存一条数据(根据多个key值条件查找 if数据存在更新else插入)
[NSObject save:dbObj withKeys:@[@"name"]];///更新一条数据(只执行更新语句)
[NSObject update:dbObj where:@"name = 'BruceYu'"];
///删除表dbObj [obj Class]
[NSObject delete:[dbObj class]];///根据条件key删除表[object class]数据
[NSObject delete:dbObj WithKey:@"name"];///根据多个条件key删除表[object class]数据
[NSObject delete:dbObj withKeys:@[@"name"]];///根据条件删除表[obj Class]数据
[NSObject delete:dbObj where:@"name = 'BruceYu' "];
///举个栗子
DBObj *obj = [DBObj queryWithkey:@"name" value:@"BruceYu"];if (nil == obj) {obj = [[DBObj query:[DBObj class]where:@"info.infoLevel1.infoLevel2.infoLevel3.infoLevel4.name4 = 'level4'"] firstObject];
}if (nil == obj) {obj = [[DBObj query:[DBObj class]] firstObject];
}obj.integer = 100;
obj.name = @"hello";
[obj update];
#pragma mark - 简单查询
/**查询表[self class]所有数据@return array*/
+ (NSArray *)query;/**查询表[obj Class]所有数据@param objClass 数据模型@return array*/
+ (NSArray *)query:(Class)objClass;/**查询表[self class]数据@param key 查询条件键key@param value 查询条件键valus@return 符合条件的第一条数据*/
+ (id)queryWithkey:(NSString*)key value:(NSString*)value;/**查询表[self class]数据@param key 查询条件键key@param value 查询条件键valus@return array*/
+ (NSArray *)query:(NSString*)key value:(NSString*)value;/**查询表[self class]数据@param keyValues 查询条件键的{key:valus}@return array*/
+ (NSArray *)queryWithkeyValues:(NSDictionary*)keyValues;#pragma mark - 高级查询/**查询表[obj Class]数据@param objClass 数据模型@param where where条件@return array*/
+ (NSArray *)query:(Class)objClass where:(NSString *)where;/**查询表[obj Class]数据@param objClass 数据模型@param order order by 条件@return array*/
+ (NSArray *)query:(Class)objClass order:(NSString *)order;/**查询表[obj Class]数据@param objClass 数据模型@param limit LIMIT 语句@return array*/
+ (NSArray *)query:(Class)objClass limit:(NSString *)limit;/**查询表[obj Class]数据@param objClass 数据模型@param where where条件@param order order by@return array*/
+ (NSArray *)query:(Class)objClass where:(NSString *)where order:(NSString *)order;/**查询表[obj Class]数据@param objClass 数据模型@param where where条件@param limit limit@return array*/
+ (NSArray *)query:(Class)objClass where:(NSString *)where limit:(NSString *)limit;/**查询表[obj Class]数据@param objClass 数据模型@param order order by@param limit limit@return array*/
+ (NSArray *)query:(Class)objClass order:(NSString *)order limit:(NSString *)limit;/**查询表[obj Class]数据@param objClass 数据模型@param where where条件@param order order by@param limit limit@return array*/
+ (NSArray *)query:(Class)objClass where:(NSString *)where order:(NSString *)order limit:(NSString *)limit;#pragma mark - 自助高级查询
/**查询数据@param objClass 需要反序列化的数据模型objClass@param sql 纯sql语句@return array @[objClass,objClass,objClass.....]*/
+ (NSArray *)query:(Class)objClass sql:(NSString *)sql;/**执行一条sql更新语句@param sql 纯sql语句@return 执行结果*/
+ (BOOL)executeUpdateWithSql:(NSString *)sql;
  • 归档
 ///存档一个对象
static NSString *const archiveName = @"DBObj.archive";
BOOL result = NO;
if ((result = [NSObject archiveObject:dbObj toName:archiveName])) {NSLog(@"归档成功:%@",NSObject.archivePath);
}
  • 解档
/// 解档一个对象
DBObj *obj = [NSObject unarchiveObjectWithName:archiveName];
NSLog(@"解档 DBObj---%@",(DBObj*)obj.name);

代码地址

转载于:https://my.oschina.net/u/868062/blog/495648

YUDBModel【绿色插件】-对象序列化、反序列化、对象一键增删改查相关推荐

  1. es java 增删改查_【java作业】如何用序列化的方法写增删改查

    培训19天的时候老师布置了一个用序列化反序列化做学生管理系统的作业.百度没找到怎么写,后来老师写了一份,我就贴出来吧.对蠢萌蠢萌.纱布拉基的我来说真TM难 首先你的包和里面的类是跟下图这样的:Work ...

  2. Java19-day10【标准输入输出流、字节字符打印流、对象序列化-反序列化流、serialVersionUIDtransient、Properties】

    视频+资料[链接:https://pan.baidu.com/s/1MdFNUADVSFf-lVw3SJRvtg   提取码:zjxs] Java基础--学习笔记(零起点打开java世界的大门)--博 ...

  3. 集合到文件 文件到集合 点名器 集合到文件数据排序版 标准输入流 打印流 对象序列化流 对象返序列化流 Properties 游戏次数 进程和线程 线程 多线程的实现方式 设置和获取线程名称

    文章目录 集合到文件 文件到集合 点名器 集合到文件数据排序版 标准输入流 打印流 对象序列化流 对象返序列化流 Properties 游戏次数 进程和线程 线程 多线程的实现方式 设置和获取线程名称 ...

  4. Java对象转JSON时如何动态的增删改查属性

    1. 前言 日常开发中少不了 JSON 处理,少不了需要在 JSON 中添加额外字段或者删除特定字段的需求.今天我们就使用Jackson类库来实现这个功能. 2. JSON 字符串增加额外字段 假如我 ...

  5. spring入门(11)-spring与hibernate整合完成增删改查的操作(封装HibernateTemplate模版类对象)

    今天是spring的最后一节课,这节课老师讲了spring与hibernate整合完成增删改查的操作,这是很重要的一节课,这也是第一次真正的实现spring结合Hibernate和数据库连接上,下面是 ...

  6. 转json_Java对象转JSON时如何动态的增删改查属性

    1. 前言 日常开发中少不了 JSON 处理,少不了需要在 JSON 中添加额外字段或者删除特定字段的需求.今天我们就使用Jackson类库来实现这个功能. 2. JSON 字符串增加额外字段 假如我 ...

  7. JavaScript学习(四十八)—原型对象的增删改查

    JavaScript学习(四十八)-原型对象的增删改查 一.构造方法与原型对象的图解 二.型对象的增删改查 (一).什么是原型 每个函数都会有一个属性--prototype属性,这个属性都会有一个对象 ...

  8. 【JS笔记】JS中的DOM对象以及通过JS获取DOM结点,操作DOM属性、DOM增删改查

    这篇文章,主要介绍JS中的DOM对象以及通过JS获取DOM结点,操作DOM属性.DOM增删改查​​​​​​​. 目录 一.JS中的DOM 1.1.什么是DOM 1.2.获取DOM结点 (1)获取htm ...

  9. JavaScript 对象增删改查 + 遍历对象+内置函数 + 随机对象

    red red 1.什么是对象? 对象是JavaScript 里的一种数据类型:可以理解为是一种无序的数据集合:用来描述某个事物,例如描述一个人信息 2.对象怎么声明? let 对象名 = {} 例如 ...

最新文章

  1. pythonista3使用教程-pythonista3中文教程
  2. Equals方法与==运算符的使用
  3. Linux下安装jdk1.6和tomcat
  4. springboot主线程_Springboot对多线程的支持详解
  5. 牛客小白月赛6 J 洋灰三角
  6. php内存泄漏的后果,记一次php内存泄漏的排查经过
  7. 外部操作获取iframe的东西
  8. 速修复!CISA警告称 Zoho 服务器0day已遭在野利用
  9. mysql oracle优缺点_oracle 的优缺点
  10. 从零基础入门Tensorflow2.0 ----三、11. tf.GradientTape与tf.keras结合使用
  11. 基于Python+MySQL的图书销售管理系统 课程论文+项目源码及数据库文件
  12. 华为android phone 驱动,Huawei 手机 驱动程序下载——更新 Huawei 软件
  13. 易语言怎么查看服务器文件,易语言文件传输查看进度
  14. Linux 定时器 基本使用
  15. 国内/国外常见搜索引擎
  16. 欧拉坐标与拉格朗日坐标
  17. 汉高2020财年第三季度实现强劲的有机销售额增长,增幅达3.9%
  18. mongodb 副本集搭建
  19. AI Gossip | 八卦人工智能的前世今生
  20. Cerebral Cortex:基因和环境对大脑功能连接的影响

热门文章

  1. 第一次使用Winhex直接修改文件二进制数据
  2. SQL CTE学习总结
  3. Java 连接各种数据库
  4. SNMP协议介绍和操作截图
  5. 一分钟检测应用状态 | 企业应用健康扫描中心发布
  6. php--理解PHP的依赖注入和laravel的服务容器
  7. Cannot add or update a child row:
  8. 开源播放器 ijkplayer (一) :使用Ijkplayer播放直播视频
  9. js data日期初始化的5种方法 [转]
  10. Java开发者写SQL时常犯的10个错误