NSObject+BGModel.h 25 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552
  1. //
  2. // NSObject+BGModel.h
  3. // BGFMDB
  4. //
  5. // Created by huangzhibiao on 17/2/28.
  6. // Copyright © 2017年 Biao. All rights reserved.
  7. // 温馨提示,同步:线程阻塞;异步:线程非阻塞;
  8. /**
  9. BGFMDB全新升级->>
  10. 完美支持:
  11. int,long,signed,float,double,NSInteger,CGFloat,BOOL,NSString,NSMutableString,NSNumber,
  12. NSArray,NSMutableArray,NSDictionary,NSMutableDictionary,NSMapTable,NSHashTable,NSData,
  13. NSMutableData,UIImage,NSDate,NSURL,NSRange,CGRect,CGSize,CGPoint,自定义对象 等的存储.
  14. */
  15. #import <Foundation/Foundation.h>
  16. #import "BGFMDBConfig.h"
  17. @protocol BGProtocol <NSObject>
  18. //可选择操作
  19. @optional
  20. /**
  21. 自定义 “联合主键” 函数, 如果需要自定义 “联合主键”,则在类中自己实现该函数.
  22. @return 返回值是 “联合主键” 的字段名(即相对应的变量名).
  23. 注:当“联合主键”和“唯一约束”同时定义时,“联合主键”优先级大于“唯一约束”.
  24. */
  25. +(NSArray* _Nonnull)bg_unionPrimaryKeys;
  26. /**
  27. 自定义 “唯一约束” 函数,如果需要 “唯一约束”字段,则在类中自己实现该函数.
  28. @return 返回值是 “唯一约束” 的字段名(即相对应的变量名).
  29. */
  30. +(NSArray* _Nonnull)bg_uniqueKeys;
  31. /**
  32. @return 返回不需要存储的属性.
  33. */
  34. +(NSArray* _Nonnull)bg_ignoreKeys;
  35. /**
  36. * 数组中需要转换的模型类(‘字典转模型’ 或 ’模型转字典‘ 都需要实现该函数)
  37. * @return 字典中的key是数组属性名,value是数组中存放模型的Class
  38. */
  39. +(NSDictionary *_Nonnull)bg_objectClassInArray;
  40. /**
  41. 如果模型中有自定义类变量,则实现该函数对应进行集合到模型的转换.
  42. 字典转模型用.
  43. */
  44. +(NSDictionary *_Nonnull)bg_objectClassForCustom;
  45. /**
  46. 将模型中对应的自定义类变量转换为字典.
  47. 模型转字典用.
  48. */
  49. +(NSDictionary *_Nonnull)bg_dictForCustomClass;
  50. /**
  51. 替换变量的功能(及当字典的key和属性名不一样时,进行映射对应起来)
  52. */
  53. +(NSDictionary *_Nonnull)bg_replacedKeyFromPropertyName;
  54. @end
  55. @interface NSObject (BGModel)<BGProtocol>
  56. /**
  57. 本库自带的自动增长主键.
  58. */
  59. @property(nonatomic,strong)NSNumber* _Nonnull bg_id;
  60. /**
  61. 为了方便开发者,特此加入以下两个字段属性供开发者做参考.(自动记录数据的存入时间和更新时间)
  62. */
  63. @property(nonatomic,copy)NSString* _Nonnull bg_createTime;//数据创建时间(即存入数据库的时间)
  64. @property(nonatomic,copy)NSString* _Nonnull bg_updateTime;//数据最后那次更新的时间.
  65. /**
  66. 自定义表名
  67. */
  68. @property(nonatomic,copy)NSString* _Nonnull bg_tableName;
  69. /**
  70. @tablename 此参数为nil时,判断以当前类名为表名的表是否存在; 此参数非nil时,判断以当前参数为表名的表是否存在.
  71. */
  72. +(BOOL)bg_isExistForTableName:(NSString* _Nullable)tablename;
  73. /**
  74. 同步存储.
  75. */
  76. -(BOOL)bg_save;
  77. /**
  78. 异步存储.
  79. */
  80. -(void)bg_saveAsync:(bg_complete_B)complete;
  81. /**
  82. 同步存储或更新.
  83. 当"唯一约束"或"主键"存在时,此接口会更新旧数据,没有则存储新数据.
  84. 提示:“唯一约束”优先级高于"主键".
  85. */
  86. -(BOOL)bg_saveOrUpdate;
  87. /**
  88. 同上条件异步.
  89. */
  90. -(void)bg_saveOrUpdateAsync:(bg_complete_B)complete;
  91. /**
  92. 同步 存储或更新 数组元素.
  93. @array 存放对象的数组.(数组中存放的是同一种类型的数据)
  94. 当"唯一约束"或"主键"存在时,此接口会更新旧数据,没有则存储新数据.
  95. 提示:“唯一约束”优先级高于"主键".
  96. */
  97. +(BOOL)bg_saveOrUpdateArray:(NSArray* _Nonnull)array;
  98. /**
  99. 同上条件异步.
  100. */
  101. +(void)bg_saveOrUpdateArrayAsync:(NSArray* _Nonnull)array complete:(bg_complete_B)complete;
  102. /**
  103. 同步覆盖存储.
  104. 覆盖掉原来的数据,只存储当前的数据.
  105. */
  106. -(BOOL)bg_cover;
  107. /**
  108. 同上条件异步.
  109. */
  110. -(void)bg_coverAsync:(bg_complete_B)complete;
  111. /**
  112. 同步查询所有结果.
  113. @tablename 当此参数为nil时,查询以此类名为表名的数据,非nil时,查询以此参数为表名的数据.
  114. 温馨提示: 当数据量巨大时,请用范围接口进行分页查询,避免查询出来的数据量过大导致程序崩溃.
  115. */
  116. +(NSArray* _Nullable)bg_findAll:(NSString* _Nullable)tablename;
  117. /**
  118. 同上条件异步.
  119. */
  120. +(void)bg_findAllAsync:(NSString* _Nullable)tablename complete:(bg_complete_A)complete;
  121. /**
  122. 查找第一条数据
  123. @tablename 当此参数为nil时,查询以此类名为表名的数据,非nil时,查询以此参数为表名的数据.
  124. */
  125. +(id _Nullable)bg_firstObjet:(NSString* _Nullable)tablename;
  126. /**
  127. 查找最后一条数据
  128. @tablename 当此参数为nil时,查询以此类名为表名的数据,非nil时,查询以此参数为表名的数据.
  129. */
  130. +(id _Nullable)bg_lastObject:(NSString* _Nullable)tablename;
  131. /**
  132. 查询某一行数据
  133. @tablename 当此参数为nil时,查询以此类名为表名的数据,非nil时,查询以此参数为表名的数据.
  134. @row 从第1行开始算起.
  135. */
  136. +(id _Nullable)bg_object:(NSString* _Nullable)tablename row:(NSInteger)row;
  137. /**
  138. 同步查询所有结果.
  139. @tablename 当此参数为nil时,查询以此类名为表名的数据,非nil时,查询以此参数为表名的数据.
  140. @orderBy 要排序的key.
  141. @limit 每次查询限制的条数,0则无限制.
  142. @desc YES:降序,NO:升序.
  143. */
  144. +(NSArray* _Nullable)bg_find:(NSString* _Nullable)tablename limit:(NSInteger)limit orderBy:(NSString* _Nullable)orderBy desc:(BOOL)desc;
  145. /**
  146. 同上条件异步.
  147. */
  148. +(void)bg_findAsync:(NSString* _Nullable)tablename limit:(NSInteger)limit orderBy:(NSString* _Nullable)orderBy desc:(BOOL)desc complete:(bg_complete_A)complete;
  149. /**
  150. 同步查询所有结果.
  151. @tablename 当此参数为nil时,查询以此类名为表名的数据,非nil时,查询以此参数为表名的数据.
  152. @orderBy 要排序的key.
  153. @range 查询的范围(从location开始的后面length条,localtion要大于0).
  154. @desc YES:降序,NO:升序.
  155. */
  156. +(NSArray* _Nullable)bg_find:(NSString* _Nullable)tablename range:(NSRange)range orderBy:(NSString* _Nullable)orderBy desc:(BOOL)desc;
  157. /**
  158. 同上条件异步.
  159. */
  160. +(void)bg_findAsync:(NSString* _Nullable)tablename range:(NSRange)range orderBy:(NSString* _Nullable)orderBy desc:(BOOL)desc complete:(bg_complete_A)complete;
  161. /**
  162. 支持keyPath.
  163. @tablename 当此参数为nil时,查询以此类名为表名的数据,非nil时,查询以此参数为表名的数据.
  164. @where 条件参数,可以为nil,nil时查询所有数据.
  165. where使用规则请看demo或如下事例:
  166. 1.查询name等于爸爸和age等于45,或者name等于马哥的数据. 此接口是为了方便开发者自由扩展更深层次的查询条件逻辑.
  167. where = [NSString stringWithFormat:@"where %@=%@ and %@=%@ or %@=%@",bg_sqlKey(@"age"),bg_sqlValue(@(45)),bg_sqlKey(@"name"),bg_sqlValue(@"爸爸"),bg_sqlKey(@"name"),bg_sqlValue(@"马哥")];
  168. 2.查询user.student.human.body等于小芳 和 user1.name中包含fuck这个字符串的数据.
  169. where = [NSString stringWithFormat:@"where %@",bg_keyPathValues(@[@"user.student.human.body",bg_equal,@"小芳",@"user1.name",bg_contains,@"fuck"])];
  170. 3.查询user.student.human.body等于小芳,user1.name中包含fuck这个字符串 和 name等于爸爸的数据.
  171. where = [NSString stringWithFormat:@"where %@ and %@=%@",bg_keyPathValues(@[@"user.student.human.body",bg_equal,@"小芳",@"user1.name",bg_contains,@"fuck"]),bg_sqlKey(@"name"),bg_sqlValue(@"爸爸")];
  172. */
  173. +(NSArray* _Nullable)bg_find:(NSString* _Nullable)tablename where:(NSString* _Nullable)where;
  174. /**
  175. 同上条件异步.
  176. */
  177. +(void)bg_findAsync:(NSString* _Nullable)tablename where:(NSString* _Nullable)where complete:(bg_complete_A)complete;
  178. /**
  179. 查询某一时间段的数据.(存入时间或更新时间)
  180. @tablename 当此参数为nil时,查询以此类名为表名的数据,非nil时,查询以此参数为表名的数据.
  181. @dateTime 参数格式:
  182. 2017 即查询2017年的数据
  183. 2017-07 即查询2017年7月的数据
  184. 2017-07-19 即查询2017年7月19日的数据
  185. 2017-07-19 16 即查询2017年7月19日16时的数据
  186. 2017-07-19 16:17 即查询2017年7月19日16时17分的数据
  187. 2017-07-19 16:17:53 即查询2017年7月19日16时17分53秒的数据
  188. 2017-07-19 16:17:53.350 即查询2017年7月19日16时17分53秒350毫秒的数据
  189. */
  190. +(NSArray* _Nullable)bg_find:(NSString* _Nullable)tablename type:(bg_dataTimeType)type dateTime:(NSString* _Nonnull)dateTime;
  191. /**
  192. 支持keyPath.
  193. @where 条件参数,不能为nil.
  194. where使用规则请看demo或如下事例:
  195. 1.将People类数据中user.student.human.body等于"小芳"的数据更新为当前对象的数据:
  196. where = [NSString stringWithFormat:@"where %@",bg_keyPathValues(@[@"user.student.human.body",bg_equal,@"小芳"])];
  197. 2.将People类中name等于"马云爸爸"的数据更新为当前对象的数据:
  198. where = [NSString stringWithFormat:@"where %@=%@",bg_sqlKey(@"name"),bg_sqlValue(@"马云爸爸")];
  199. */
  200. -(BOOL)bg_updateWhere:(NSString* _Nonnull)where;
  201. /**
  202. 同上条件异步.
  203. */
  204. -(void)bg_updateAsyncWhere:(NSString* _Nonnull)where complete:(bg_complete_B)complete;
  205. /**
  206. 此接口不支持keyPath.
  207. @tablename 当此参数为nil时,查询以此类名为表名的数据,非nil时,更新以此参数为表名的数据.
  208. @where 条件参数,不能为nil.
  209. where使用规则请看demo或如下事例:
  210. 1.将People类中name等于"马云爸爸"的数据的name更新为"马化腾":
  211. where = [NSString stringWithFormat:@"set %@=%@ where %@=%@",bg_sqlKey(@"name"),bg_sqlValue(@"马化腾"),bg_sqlKey(@"name"),bg_sqlValue(@"马云爸爸")];
  212. */
  213. +(BOOL)bg_update:(NSString* _Nullable)tablename where:(NSString* _Nonnull)where;
  214. /**
  215. 支持keyPath.
  216. @tablename 当此参数为nil时,查询以此类名为表名的数据,非nil时,删除以此参数为表名的数据.
  217. @where 条件参数,可以为nil,nil时删除所有以tablename为表名的数据.
  218. where使用规则请看demo或如下事例:
  219. 1.删除People类中name等于"美国队长"的数据.
  220. where = [NSString stringWithFormat:@"where %@=%@",bg_sqlKey(@"name"),bg_sqlValue(@"美国队长")];
  221. 2.删除People类中user.student.human.body等于"小芳"的数据.
  222. where = [NSString stringWithFormat:@"where %@",bg_keyPathValues(@[@"user.student.human.body",bg_equal,@"小芳"])];
  223. 3.删除People类中name等于"美国队长" 和 user.student.human.body等于"小芳"的数据.
  224. where = [NSString stringWithFormat:@"where %@=%@ and %@",bg_sqlKey(@"name"),bg_sqlValue(@"美国队长"),bg_keyPathValues(@[@"user.student.human.body",bg_equal,@"小芳"])];
  225. */
  226. +(BOOL)bg_delete:(NSString* _Nullable)tablename where:(NSString* _Nullable)where;
  227. /**
  228. 同上条件异步.
  229. */
  230. +(void)bg_deleteAsync:(NSString* _Nullable)tablename where:(NSString* _Nullable)where complete:(bg_complete_B)complete;
  231. /**
  232. 删除某一行数据
  233. @tablename 当此参数为nil时,查询以此类名为表名的数据,非nil时,删除以此参数为表名的数据.
  234. @row 第几行,从第1行算起.
  235. */
  236. +(BOOL)bg_delete:(NSString* _Nullable)tablename row:(NSInteger)row;
  237. /**
  238. 删除第一条数据
  239. @tablename 当此参数为nil时,查询以此类名为表名的数据,非nil时,删除以此参数为表名的数据.
  240. */
  241. +(BOOL)bg_deleteFirstObject:(NSString* _Nullable)tablename;
  242. /**
  243. 删除最后一条数据
  244. @tablename 当此参数为nil时,查询以此类名为表名的数据,非nil时,删除以此参数为表名的数据.
  245. */
  246. +(BOOL)bg_deleteLastObject:(NSString* _Nullable)tablename;
  247. /**
  248. 同步清除所有数据.
  249. @tablename 当此参数为nil时,查询以此类名为表名的数据,非nil时,清除以此参数为表名的数据.
  250. */
  251. +(BOOL)bg_clear:(NSString* _Nullable)tablename;
  252. /**
  253. 异步清除所有数据.
  254. @tablename 当此参数为nil时,查询以此类名为表名的数据,非nil时,清除以此参数为表名的数据.
  255. */
  256. +(void)bg_clearAsync:(NSString* _Nullable)tablename complete:(bg_complete_B)complete;
  257. /**
  258. 同步删除这个类的数据表.
  259. @tablename 当此参数为nil时,查询以此类名为表名的数据,非nil时,清除以此参数为表名的数据.
  260. */
  261. +(BOOL)bg_drop:(NSString* _Nullable)tablename;
  262. /**
  263. 异步删除这个类的数据表.
  264. @tablename 当此参数为nil时,查询以此类名为表名的数据,非nil时,清除以此参数为表名的数据.
  265. */
  266. +(void)bg_dropAsync:(NSString* _Nullable)tablename complete:(bg_complete_B)complete;
  267. /**
  268. 查询该表中有多少条数据.
  269. @tablename 当此参数为nil时,查询以此类名为表名的数据条数,非nil时,查询以此参数为表名的数据条数.
  270. @where 条件参数,nil时查询所有以tablename为表名的数据条数.
  271. 支持keyPath.
  272. 使用规则请看demo或如下事例:
  273. 1.查询People类中name等于"美国队长"的数据条数.
  274. where = [NSString stringWithFormat:@"where %@=%@",bg_sqlKey(@"name"),bg_sqlValue(@"美国队长")];
  275. 2.查询People类中user.student.human.body等于"小芳"的数据条数.
  276. where = [NSString stringWithFormat:@"where %@",bg_keyPathValues(@[@"user.student.human.body",bg_equal,@"小芳"])];
  277. 3.查询People类中name等于"美国队长" 和 user.student.human.body等于"小芳"的数据条数.
  278. where = [NSString stringWithFormat:@"where %@=%@ and %@",bg_sqlKey(@"name"),bg_sqlValue(@"美国队长"),bg_keyPathValues(@[@"user.student.human.body",bg_equal,@"小芳"])];
  279. */
  280. +(NSInteger)bg_count:(NSString* _Nullable)tablename where:(NSString* _Nullable)where;
  281. /**
  282. 直接调用sqliteb的原生函数计算sun,min,max,avg等.
  283. @tablename 当此参数为nil时,操作以此类名为表名的数据表,非nil时,操作以此参数为表名的数据表.
  284. @key -> 要操作的属性,不支持keyPath.
  285. @where -> 条件参数,支持keyPath.
  286. */
  287. +(double)bg_sqliteMethodWithTableName:(NSString* _Nullable)tablename type:(bg_sqliteMethodType)methodType key:(NSString* _Nonnull)key where:(NSString* _Nullable)where;
  288. /**
  289. 获取数据表当前版本号.
  290. @tablename 当此参数为nil时,操作以此类名为表名的数据表,非nil时,操作以此参数为表名的数据表.
  291. */
  292. +(NSInteger)bg_version:(NSString* _Nullable)tablename;
  293. /**
  294. 刷新,当类'唯一约束','联合主键','属性类型'发生改变时,调用此接口刷新一下.
  295. 同步刷新.
  296. @tablename 当此参数为nil时,操作以此类名为表名的数据表,非nil时,操作以此参数为表名的数据表.
  297. @version 版本号,从1开始,依次往后递增.
  298. 说明: 本次更新版本号不得 低于或等于 上次的版本号,否则不会更新.
  299. */
  300. +(bg_dealState)bg_update:(NSString* _Nullable)tablename version:(NSInteger)version;
  301. /**
  302. 同上条件异步.
  303. */
  304. +(void)bg_updateAsync:(NSString* _Nullable)tablename version:(NSInteger)version complete:(bg_complete_I)complete;
  305. /**
  306. 刷新,当类'唯一约束','联合主键','属性类型'发生改变时,调用此接口刷新一下.
  307. 同步刷新.
  308. @tablename 当此参数为nil时,操作以此类名为表名的数据表,非nil时,操作以此参数为表名的数据表.
  309. @version 版本号,从1开始,依次往后递增.
  310. @keyDict 拷贝的对应key集合,形式@{@"新Key1":@"旧Key1",@"新Key2":@"旧Key2"},即将本类以前的变量 “旧Key1” 的数据拷贝给现在本类的变量“新Key1”,其他依此推类.
  311. (特别提示: 这里只要写那些改变了的变量名就可以了,没有改变的不要写),比如A以前有3个变量,分别为a,b,c;现在变成了a,b,d;那只要写@{@"d":@"c"}就可以了,即只写变化了的变量名映射集合.
  312. 说明: 本次更新版本号不得 低于或等于 上次的版本号,否则不会更新.
  313. */
  314. +(bg_dealState)bg_update:(NSString* _Nullable)tablename version:(NSInteger)version keyDict:(NSDictionary* const _Nonnull)keydict;
  315. /**
  316. 同上条件异步.
  317. */
  318. +(void)bg_updateAsync:(NSString* _Nullable)tablename version:(NSInteger)version keyDict:(NSDictionary* const _Nonnull)keydict complete:(bg_complete_I)complete;
  319. /**
  320. 将某表的数据拷贝给另一个表.
  321. 同步复制.
  322. @tablename 源表名,当此参数为nil时,操作以此类名为表名的数据表,非nil时,操作以此参数为表名的数据表.
  323. @destCla 目标表名.
  324. @keyDict 拷贝的对应key集合,形式@{@"srcKey1":@"destKey1",@"srcKey2":@"destKey2"},即将源类srcCla中的变量值拷贝给目标类destCla中的变量destKey1,srcKey2和destKey2同理对应,依此推类.
  325. @append YES: 不会覆盖destCla的原数据,在其末尾继续添加;NO: 覆盖掉destCla原数据,即将原数据删掉,然后将新数据拷贝过来.
  326. */
  327. +(bg_dealState)bg_copy:(NSString* _Nullable)tablename toTable:(NSString* _Nonnull)destTable keyDict:(NSDictionary* const _Nonnull)keydict append:(BOOL)append;
  328. /**
  329. 同上条件异步.
  330. */
  331. +(void)bg_copyAsync:(NSString* _Nullable)tablename toTable:(NSString* _Nonnull)destTable keyDict:(NSDictionary* const _Nonnull)keydict append:(BOOL)append complete:(bg_complete_I)complete;
  332. /**
  333. 注册数据库表变化监听.
  334. @tablename 表名称,当此参数为nil时,监听以当前类名为表名的数据表,当此参数非nil时,监听以此参数为表名的数据表。
  335. @identify 唯一标识,,此字符串唯一,不可重复,移除监听的时候使用此字符串移除.
  336. @return YES: 注册监听成功; NO: 注册监听失败.
  337. */
  338. +(BOOL)bg_registerChangeForTableName:(NSString* _Nullable)tablename identify:(NSString* _Nonnull)identify block:(bg_changeBlock)block;
  339. /**
  340. 移除数据库表变化监听.
  341. @tablename 表名称,当此参数为nil时,监听以当前类名为表名的数据表,当此参数非nil时,监听以此参数为表名的数据表。
  342. @identify 唯一标识,,此字符串唯一,不可重复,移除监听的时候使用此字符串移除.
  343. @return YES: 移除监听成功; NO: 移除监听失败.
  344. */
  345. +(BOOL)bg_removeChangeForTableName:(NSString* _Nullable)tablename identify:(NSString* _Nonnull)identify;
  346. #pragma mark 下面附加字典转模型API,简单好用,在只需要字典转模型功能的情况下,可以不必要再引入MJExtension那么多文件,造成代码冗余,缩减安装包.
  347. /**
  348. 字典转模型.
  349. @keyValues 字典(NSDictionary)或json格式字符.
  350. 说明:如果模型中有数组且存放的是自定义的类(NSString等系统自带的类型就不必要了),那就实现objectClassInArray这个函数返回一个字典,key是数组名称,value是自定的类Class,用法跟MJExtension一样.
  351. */
  352. +(id _Nonnull)bg_objectWithKeyValues:(id const _Nonnull)keyValues;
  353. +(id _Nonnull)bg_objectWithDictionary:(NSDictionary* const _Nonnull)dictionary;
  354. /**
  355. 直接传数组批量处理;
  356. 注:array中的元素是字典,否则出错.
  357. */
  358. +(NSArray* _Nonnull)bg_objectArrayWithKeyValuesArray:(NSArray* const _Nonnull)array;
  359. /**
  360. 模型转字典.
  361. @ignoredKeys 忽略掉模型中的哪些key(即模型变量)不要转,nil时全部转成字典.
  362. */
  363. -(NSMutableDictionary* _Nonnull)bg_keyValuesIgnoredKeys:(NSArray* _Nullable)ignoredKeys;
  364. #warning mark 过期方法(能正常使用,但不建议使用)
  365. /**
  366. 判断这个类的数据表是否已经存在.
  367. */
  368. +(BOOL)bg_isExist BGFMDBDeprecated("此方法已过期(能正常使用,但不建议使用),使用bg_isExistForTableName:替代.");
  369. /**
  370. 同步存入对象数组.
  371. @array 存放对象的数组.(数组中存放的是同一种类型的数据)
  372. */
  373. +(BOOL)bg_saveArray:(NSArray* _Nonnull)array BGFMDBDeprecated("此方法已过期(能正常使用,但不建议使用),请使用bg_saveOrUpdateArray替代");
  374. /**
  375. 同上条件异步.
  376. */
  377. +(void)bg_saveArrayAsync:(NSArray* _Nonnull)array complete:(bg_complete_B)complete BGFMDBDeprecated("此方法已过期(能正常使用,但不建议使用),请使用bg_saveOrUpdateArray替代");
  378. /**
  379. 同步更新对象数组.
  380. @array 存放对象的数组.(数组中存放的是同一种类型的数据).
  381. 当类中定义了"唯一约束" 或 "主键"有值时,使用此API才有意义.
  382. 提示:“唯一约束”优先级高于"主键".
  383. */
  384. +(BOOL)bg_updateArray:(NSArray* _Nonnull)array BGFMDBDeprecated("此方法已过期(能正常使用,但不建议使用),请使用bg_saveOrUpdateArray替代");
  385. /**
  386. 同上条件异步.
  387. */
  388. +(void)bg_updateArrayAsync:(NSArray* _Nonnull)array complete:(bg_complete_B)complete BGFMDBDeprecated("此方法已过期(能正常使用,但不建议使用),请使用bg_saveOrUpdateArray替代");
  389. /**
  390. 同步存入对象数组.
  391. @array 存放对象的数组.(数组中存放的是同一种类型的数据)
  392. */
  393. +(BOOL)bg_saveArray:(NSArray* _Nonnull)array IgnoreKeys:(NSArray* const _Nullable)ignoreKeys BGFMDBDeprecated("此方法已过期(能正常使用,但不建议使用),在模型的.m文件中实现bg_ignoreKeys函数即可");
  394. /**
  395. 异步存入对象数组.
  396. @array 存放对象的数组.(数组中存放的是同一种类型的数据)
  397. */
  398. +(void)bg_saveArrayAsync:(NSArray* _Nonnull)array IgnoreKeys:(NSArray* const _Nullable)ignoreKeys complete:(bg_complete_B)complete BGFMDBDeprecated("此方法已过期(能正常使用,但不建议使用),在模型的.m文件中实现bg_ignoreKeys函数即可");
  399. /**
  400. 同步存储.
  401. @ignoreKeys 忽略掉模型中的哪些key(即模型变量)不要存储.
  402. */
  403. -(BOOL)bg_saveIgnoredKeys:(NSArray* const _Nonnull)ignoredKeys BGFMDBDeprecated("此方法已过期(能正常使用,但不建议使用),在模型的.m文件中实现bg_ignoreKeys函数即可");
  404. /**
  405. 异步存储.
  406. @ignoreKeys 忽略掉模型中的哪些key(即模型变量)不要存储.
  407. */
  408. -(void)bg_saveAsyncIgnoreKeys:(NSArray* const _Nonnull)ignoredKeys complete:(bg_complete_B)complete BGFMDBDeprecated("此方法已过期(能正常使用,但不建议使用),在模型的.m文件中实现bg_ignoreKeys函数即可");
  409. /**
  410. 同步覆盖存储.
  411. 覆盖掉原来的数据,只存储当前的数据.
  412. @ignoreKeys 忽略掉模型中的哪些key(即模型变量)不要存储.
  413. */
  414. -(BOOL)bg_coverIgnoredKeys:(NSArray* const _Nonnull)ignoredKeys BGFMDBDeprecated("此方法已过期(能正常使用,但不建议使用),在模型的.m文件中实现bg_ignoreKeys函数即可");
  415. /**
  416. 异步覆盖存储.
  417. 覆盖掉原来的数据,只存储当前的数据.
  418. @ignoreKeys 忽略掉模型中的哪些key(即模型变量)不要存储.
  419. */
  420. -(void)bg_coverAsyncIgnoredKeys:(NSArray* const _Nonnull)ignoredKeys complete:(bg_complete_B)complete BGFMDBDeprecated("此方法已过期(能正常使用,但不建议使用),在模型的.m文件中实现bg_ignoreKeys函数即可");
  421. /**
  422. 同步更新数据.
  423. @where 条件数组,形式@[@"name",@"=",@"标哥",@"age",@"=>",@(25)],即更新name=标哥,age=>25的数据.
  424. 可以为nil,nil时更新所有数据;
  425. @ignoreKeys 忽略哪些key不用更新.
  426. 不支持keypath的key,即嵌套的自定义类, 形式如@[@"user.name",@"=",@"习大大"]暂不支持(有专门的keyPath更新接口).
  427. */
  428. -(BOOL)bg_updateWhere:(NSArray* _Nullable)where ignoreKeys:(NSArray* const _Nullable)ignoreKeys BGFMDBDeprecated("此方法已过期(能正常使用,但不建议使用),在模型的.m文件中实现bg_ignoreKeys函数即可");
  429. /**
  430. @format 传入sql条件参数,语句来进行更新,方便开发者自由扩展.
  431. 支持keyPath.
  432. 使用规则请看demo或如下事例:
  433. 1.将People类数据中user.student.human.body等于"小芳"的数据更新为当前对象的数据(忽略name不要更新).
  434. NSString* conditions = [NSString stringWithFormat:@"where %@",bg_keyPathValues(@[@"user.student.human.body",bg_equal,@"小芳"])];
  435. [p bg_updateFormatSqlConditions:conditions IgnoreKeys:@[@"name"]];
  436. 2.将People类中name等于"马云爸爸"的数据更新为当前对象的数据.
  437. NSString* conditions = [NSString stringWithFormat:@"where %@=%@",bg_sqlKey(@"name"),bg_sqlValue(@"马云爸爸")])];
  438. [p bg_updateFormatSqlConditions:conditions IgnoreKeys:nil];
  439. @ignoreKeys 忽略哪些key不用更新.
  440. */
  441. -(BOOL)bg_updateFormatSqlConditions:(NSString* _Nonnull)conditions IgnoreKeys:(NSArray* const _Nullable)ignoreKeys BGFMDBDeprecated("此方法已过期(能正常使用,但不建议使用),在模型的.m文件中实现bg_ignoreKeys函数即可");
  442. @end
  443. #pragma mark 直接存储数组.
  444. @interface NSArray (BGModel)
  445. /**
  446. 存储数组.
  447. @name 唯一标识名称.
  448. **/
  449. -(BOOL)bg_saveArrayWithName:(NSString* const _Nonnull)name;
  450. /**
  451. 添加数组元素.
  452. @name 唯一标识名称.
  453. @object 要添加的元素.
  454. */
  455. +(BOOL)bg_addObjectWithName:(NSString* const _Nonnull)name object:(id const _Nonnull)object;
  456. /**
  457. 获取数组元素数量.
  458. @name 唯一标识名称.
  459. */
  460. +(NSInteger)bg_countWithName:(NSString* const _Nonnull)name;
  461. /**
  462. 查询整个数组
  463. */
  464. +(NSArray* _Nullable)bg_arrayWithName:(NSString* const _Nonnull)name;
  465. /**
  466. 获取数组某个位置的元素.
  467. @name 唯一标识名称.
  468. @index 数组元素位置.
  469. */
  470. +(id _Nullable)bg_objectWithName:(NSString* const _Nonnull)name Index:(NSInteger)index;
  471. /**
  472. 更新数组某个位置的元素.
  473. @name 唯一标识名称.
  474. @index 数组元素位置.
  475. */
  476. +(BOOL)bg_updateObjectWithName:(NSString* const _Nonnull)name Object:(id _Nonnull)object Index:(NSInteger)index;
  477. /**
  478. 删除数组的某个元素.
  479. @name 唯一标识名称.
  480. @index 数组元素位置.
  481. */
  482. +(BOOL)bg_deleteObjectWithName:(NSString* const _Nonnull)name Index:(NSInteger)index;
  483. /**
  484. 清空数组元素.
  485. @name 唯一标识名称.
  486. */
  487. +(BOOL)bg_clearArrayWithName:(NSString* const _Nonnull)name;
  488. @end
  489. #pragma mark 直接存储字典.
  490. @interface NSDictionary (BGModel)
  491. /**
  492. 存储字典.
  493. */
  494. -(BOOL)bg_saveDictionary;
  495. /**
  496. 添加字典元素.
  497. */
  498. +(BOOL)bg_setValue:(id const _Nonnull)value forKey:(NSString* const _Nonnull)key;
  499. /**
  500. 更新字典元素.
  501. */
  502. +(BOOL)bg_updateValue:(id const _Nonnull)value forKey:(NSString* const _Nonnull)key;
  503. /**
  504. 获取字典元素.
  505. */
  506. +(id _Nullable)bg_valueForKey:(NSString* const _Nonnull)key;
  507. /**
  508. 遍历字典元素.
  509. */
  510. +(void)bg_enumerateKeysAndObjectsUsingBlock:(void (^ _Nonnull)(NSString* _Nonnull key, id _Nonnull value,BOOL *stop))block;
  511. /**
  512. 移除字典某个元素.
  513. */
  514. +(BOOL)bg_removeValueForKey:(NSString* const _Nonnull)key;
  515. /**
  516. 清空字典.
  517. */
  518. +(BOOL)bg_clearDictionary;
  519. @end