日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

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

發(fā)布時間:2025/4/5 编程问答 26 豆豆
生活随笔 收集整理的這篇文章主要介紹了 YUDBModel【绿色插件】-对象序列化、反序列化、对象一键增删改查 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

2019獨角獸企業(yè)重金招聘Python工程師標準>>>

一、YUDBModel 介紹

  • 架構: 使用runtime和Sqlite實現(xiàn)NSObject擴展類YUDBModel,直接實現(xiàn)(json反序列化對象-對象增刪改查數(shù)據(jù)庫-對象序列化)
  • 易用: 無需繼承,直接實現(xiàn)序列化、反序列化、一行代碼操作數(shù)據(jù)庫
  • 穩(wěn)定: 耦合度低,容錯率高,兼容復雜和特殊數(shù)據(jù)類型
  • 支持: (NSObject,NSArray,NSDictionary,NSData,NSString,NSNumber,NSURL,Int,double,long,float,Bool,char)類型
  • 靈活: 支持反序列化json key替換,支持自設定主鍵,支持忽略模型存儲字段,支持反序列化代理之定義數(shù)據(jù)(deserialize()),支持使用Sqlite函數(shù)進行查詢.
  • 強大: 支持json反序列化對象-對象增刪改查數(shù)據(jù)庫-對象序列化,支持模型嵌套存儲和多表嵌套復雜查詢
  • 智能: 自動增刪改表字段,自動初始化空對象(NSObject,NSArray,NSDictionary,NSString)

二、YUDBModel 集成

  • 手動復制《YUDBModel.framework》到工程

  • 使用Cocoapods管理

三、YUDBModel 使用

YUDBModel配置

///設置數(shù)據(jù)庫路徑 extern void YUDBModel_SetupDBPath(NSString *path);///設置對象歸檔路徑 extern void YUDBModel_SetupObjectPath(NSString *path);///設置數(shù)據(jù)庫版本號 extern void YUDBModel_SetupDBVersion(NSString *version);///打開日志輸出 extern void YUDBModel_SetDBLog(BOOL on);///刪除數(shù)據(jù)庫文件 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;/**需要過濾在數(shù)據(jù)庫表中的特殊字段 不儲存的字段@return e.g. return @[@"desrc"]*/ +(NSArray<NSString*> *)YUDBModel_IgnoreFields;/**設置主鍵@return 主鍵的 keyName*/ +(NSString*)YUDBModel_PrimaryKey;/**反序列化json自定義操作(通常用于NSArray和特殊處理)@param key key值@param value value值@return 根據(jù)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"];//自定義數(shù)組}else if ([key isEqualToString:@"name"]) {return @"自定義名字";}return nil;}];}

序列化

///把對象轉換成json NSDictionary * json = [dbObj dictionary];

數(shù)據(jù)存儲 增、刪、改、查

  • 增 改
///直接插入一條數(shù)據(jù) [NSObject insert:dbObj];///直接插入多條數(shù)據(jù) [NSObject insertObjs:@[dbObj]];///保存一條數(shù)據(jù)(根據(jù)rowid查找 if數(shù)據(jù)存在更新else插入) [NSObject save:dbObj];///保存多條數(shù)據(jù)(根據(jù)rowid查找 if數(shù)據(jù)存在更新else插入) [NSObject saveObjs:@[dbObj]];///保存一條數(shù)據(jù)(根據(jù)key值條件查找 if數(shù)據(jù)存在更新else插入) [NSObject save:dbObj withKey:@"name"];///保存一條數(shù)據(jù)(根據(jù)多個key值條件查找 if數(shù)據(jù)存在更新else插入) [NSObject save:dbObj withKeys:@[@"name"]];///更新一條數(shù)據(jù)(只執(zhí)行更新語句) [NSObject update:dbObj where:@"name = 'BruceYu'"];
///刪除表dbObj [obj Class] [NSObject delete:[dbObj class]];///根據(jù)條件key刪除表[object class]數(shù)據(jù) [NSObject delete:dbObj WithKey:@"name"];///根據(jù)多個條件key刪除表[object class]數(shù)據(jù) [NSObject delete:dbObj withKeys:@[@"name"]];///根據(jù)條件刪除表[obj Class]數(shù)據(jù) [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]所有數(shù)據(jù)@return array*/ + (NSArray *)query;/**查詢表[obj Class]所有數(shù)據(jù)@param objClass 數(shù)據(jù)模型@return array*/ + (NSArray *)query:(Class)objClass;/**查詢表[self class]數(shù)據(jù)@param key 查詢條件鍵key@param value 查詢條件鍵valus@return 符合條件的第一條數(shù)據(jù)*/ + (id)queryWithkey:(NSString*)key value:(NSString*)value;/**查詢表[self class]數(shù)據(jù)@param key 查詢條件鍵key@param value 查詢條件鍵valus@return array*/ + (NSArray *)query:(NSString*)key value:(NSString*)value;/**查詢表[self class]數(shù)據(jù)@param keyValues 查詢條件鍵的{key:valus}@return array*/ + (NSArray *)queryWithkeyValues:(NSDictionary*)keyValues;#pragma mark - 高級查詢/**查詢表[obj Class]數(shù)據(jù)@param objClass 數(shù)據(jù)模型@param where where條件@return array*/ + (NSArray *)query:(Class)objClass where:(NSString *)where;/**查詢表[obj Class]數(shù)據(jù)@param objClass 數(shù)據(jù)模型@param order order by 條件@return array*/ + (NSArray *)query:(Class)objClass order:(NSString *)order;/**查詢表[obj Class]數(shù)據(jù)@param objClass 數(shù)據(jù)模型@param limit LIMIT 語句@return array*/ + (NSArray *)query:(Class)objClass limit:(NSString *)limit;/**查詢表[obj Class]數(shù)據(jù)@param objClass 數(shù)據(jù)模型@param where where條件@param order order by@return array*/ + (NSArray *)query:(Class)objClass where:(NSString *)where order:(NSString *)order;/**查詢表[obj Class]數(shù)據(jù)@param objClass 數(shù)據(jù)模型@param where where條件@param limit limit@return array*/ + (NSArray *)query:(Class)objClass where:(NSString *)where limit:(NSString *)limit;/**查詢表[obj Class]數(shù)據(jù)@param objClass 數(shù)據(jù)模型@param order order by@param limit limit@return array*/ + (NSArray *)query:(Class)objClass order:(NSString *)order limit:(NSString *)limit;/**查詢表[obj Class]數(shù)據(jù)@param objClass 數(shù)據(jù)模型@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 - 自助高級查詢 /**查詢數(shù)據(jù)@param objClass 需要反序列化的數(shù)據(jù)模型objClass@param sql 純sql語句@return array @[objClass,objClass,objClass.....]*/ + (NSArray *)query:(Class)objClass sql:(NSString *)sql;/**執(zhí)行一條sql更新語句@param sql 純sql語句@return 執(zhí)行結果*/ + (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【绿色插件】-对象序列化、反序列化、对象一键增删改查的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內容還不錯,歡迎將生活随笔推薦給好友。