YUDBModel【绿色插件】-对象序列化、反序列化、对象一键增删改查
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【绿色插件】-对象序列化、反序列化、对象一键增删改查相关推荐
- es java 增删改查_【java作业】如何用序列化的方法写增删改查
培训19天的时候老师布置了一个用序列化反序列化做学生管理系统的作业.百度没找到怎么写,后来老师写了一份,我就贴出来吧.对蠢萌蠢萌.纱布拉基的我来说真TM难 首先你的包和里面的类是跟下图这样的:Work ...
- Java19-day10【标准输入输出流、字节字符打印流、对象序列化-反序列化流、serialVersionUIDtransient、Properties】
视频+资料[链接:https://pan.baidu.com/s/1MdFNUADVSFf-lVw3SJRvtg 提取码:zjxs] Java基础--学习笔记(零起点打开java世界的大门)--博 ...
- 集合到文件 文件到集合 点名器 集合到文件数据排序版 标准输入流 打印流 对象序列化流 对象返序列化流 Properties 游戏次数 进程和线程 线程 多线程的实现方式 设置和获取线程名称
文章目录 集合到文件 文件到集合 点名器 集合到文件数据排序版 标准输入流 打印流 对象序列化流 对象返序列化流 Properties 游戏次数 进程和线程 线程 多线程的实现方式 设置和获取线程名称 ...
- Java对象转JSON时如何动态的增删改查属性
1. 前言 日常开发中少不了 JSON 处理,少不了需要在 JSON 中添加额外字段或者删除特定字段的需求.今天我们就使用Jackson类库来实现这个功能. 2. JSON 字符串增加额外字段 假如我 ...
- spring入门(11)-spring与hibernate整合完成增删改查的操作(封装HibernateTemplate模版类对象)
今天是spring的最后一节课,这节课老师讲了spring与hibernate整合完成增删改查的操作,这是很重要的一节课,这也是第一次真正的实现spring结合Hibernate和数据库连接上,下面是 ...
- 转json_Java对象转JSON时如何动态的增删改查属性
1. 前言 日常开发中少不了 JSON 处理,少不了需要在 JSON 中添加额外字段或者删除特定字段的需求.今天我们就使用Jackson类库来实现这个功能. 2. JSON 字符串增加额外字段 假如我 ...
- JavaScript学习(四十八)—原型对象的增删改查
JavaScript学习(四十八)-原型对象的增删改查 一.构造方法与原型对象的图解 二.型对象的增删改查 (一).什么是原型 每个函数都会有一个属性--prototype属性,这个属性都会有一个对象 ...
- 【JS笔记】JS中的DOM对象以及通过JS获取DOM结点,操作DOM属性、DOM增删改查
这篇文章,主要介绍JS中的DOM对象以及通过JS获取DOM结点,操作DOM属性.DOM增删改查. 目录 一.JS中的DOM 1.1.什么是DOM 1.2.获取DOM结点 (1)获取htm ...
- JavaScript 对象增删改查 + 遍历对象+内置函数 + 随机对象
red red 1.什么是对象? 对象是JavaScript 里的一种数据类型:可以理解为是一种无序的数据集合:用来描述某个事物,例如描述一个人信息 2.对象怎么声明? let 对象名 = {} 例如 ...
最新文章
- pythonista3使用教程-pythonista3中文教程
- Equals方法与==运算符的使用
- Linux下安装jdk1.6和tomcat
- springboot主线程_Springboot对多线程的支持详解
- 牛客小白月赛6 J 洋灰三角
- php内存泄漏的后果,记一次php内存泄漏的排查经过
- 外部操作获取iframe的东西
- 速修复!CISA警告称 Zoho 服务器0day已遭在野利用
- mysql oracle优缺点_oracle 的优缺点
- 从零基础入门Tensorflow2.0 ----三、11. tf.GradientTape与tf.keras结合使用
- 基于Python+MySQL的图书销售管理系统 课程论文+项目源码及数据库文件
- 华为android phone 驱动,Huawei 手机 驱动程序下载——更新 Huawei 软件
- 易语言怎么查看服务器文件,易语言文件传输查看进度
- Linux 定时器 基本使用
- 国内/国外常见搜索引擎
- 欧拉坐标与拉格朗日坐标
- 汉高2020财年第三季度实现强劲的有机销售额增长,增幅达3.9%
- mongodb 副本集搭建
- AI Gossip | 八卦人工智能的前世今生
- Cerebral Cortex:基因和环境对大脑功能连接的影响