From 6723c447fd797af8e5f156d3a5bde699addb96ca Mon Sep 17 00:00:00 2001 From: huangzhibiao <450426721@qq.com> Date: Thu, 9 Mar 2017 13:44:22 +0800 Subject: [PATCH] =?UTF-8?q?=E6=9B=B4=E6=96=B0API=E8=AF=B4=E6=98=8E.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 206 +++++++++++++++++++++++++++++++++++++++++++----------- 1 file changed, 167 insertions(+), 39 deletions(-) diff --git a/README.md b/README.md index 057fdf3..b97a26f 100644 --- a/README.md +++ b/README.md @@ -14,19 +14,22 @@ LKDBHelper好一点,但也要复写不少的函数,而且LKDBHelper的使用demo ## 综合上述原因后,我决定写一款适合国内初中级开发这使用的封装库(BGFMDB),不管是从使用步骤还是支持的存储类型上,都比JRDB,LKDB简单好用和全面. ## 本库几乎支持存储ios所有基本的自带数据类型. ## 一看就懂,马马上手使用,废话不多说,看使用Api介绍. - + //同步:线程阻塞;异步:线程非阻塞; -@property(nonatomic,strong)NSNumber*_Nullable ID;//本库自带的自动增长主键. /** 设置调试模式 @debug YES:打印SQL语句, NO:不打印SQL语句. */ -+(void)setDebug:(BOOL)debug; ++(void)setDebug:(BOOL)debug; /** - 事务操作. - @return 返回YES提交事务, 返回NO回滚事务. - */ -+(void)inTransaction:(BOOL (^_Nonnull)())block; + 自定义 “唯一约束” 函数,如果需要 “唯一约束”字段,则在自定类中自己实现该函数. + @return 返回值是 “唯一约束” 的字段名(即相对应的变量名). + */ +-(NSString* _Nonnull)uniqueKey; +/** + 判断这个类的数据表是否已经存在. + */ ++(BOOL)isExist; /** 同步存储. */ @@ -35,101 +38,226 @@ LKDBHelper好一点,但也要复写不少的函数,而且LKDBHelper的使用demo 异步存储. */ -(void)saveAsync:(Complete_B)complete; +/** + 同步覆盖存储. + 覆盖掉原来的数据,只存储当前的数据. + */ +-(BOOL)cover; +/** + 异步覆盖存储 + 覆盖掉原来的数据,只存储当前的数据. + */ +-(void)coverAsync:(Complete_B)complete; /** 同步查询所有结果. */ +(NSArray* _Nullable)findAll; /** - 异步查询所有结果. + 异步查询所有结果 */ +(void)findAllAsync:(Complete_A)complete; /** - @async YES:异步查询所有结果,NO:同步查询所有结果. + 同步查询所有结果. + @limit 每次查询限制的条数,0则无限制. + @desc YES:降序,NO:升序. + */ ++(NSArray* _Nullable)findAllWithLimit:(NSInteger)limit orderBy:(NSString* _Nullable)orderBy desc:(BOOL)desc; +/** + 异步查询所有结果. @limit 每次查询限制的条数,0则无限制. @desc YES:降序,NO:升序. */ -+(void)findAllAsync:(BOOL)async limit:(NSInteger)limit orderBy:(NSString* _Nullable)orderBy desc:(BOOL)desc complete: (Complete_A)complete; ++(void)findAllAsyncWithLimit:(NSInteger)limit orderBy:(NSString* _Nullable)orderBy desc:(BOOL)desc complete: (Complete_A)complete; +/** + 同步查询所有结果. + @range 查询的范围(从location开始的后面length条). + @desc YES:降序,NO:升序. + */ ++(NSArray* _Nullable)findAllWithRange:(NSRange)range orderBy:(NSString* _Nullable)orderBy desc:(BOOL)desc; /** - @async YES:异步查询所有结果,NO:同步查询所有结果. + 异步查询所有结果. @range 查询的范围(从location开始的后面length条). @desc YES:降序,NO:升序. */ -+(void)findAllAsync:(BOOL)async range:(NSRange)range orderBy:(NSString* _Nullable)orderBy desc:(BOOL)desc complete:(Complete_A)complete; ++(void)findAllAsyncWithRange:(NSRange)range orderBy:(NSString* _Nullable)orderBy desc:(BOOL)desc complete:(Complete_A)complete; /** - @async YES:异步查询所有结果,NO:同步查询所有结果. + 同步条件查询所有结果. @where 条件数组,形式@[@"name",@"=",@"标哥",@"age",@"=>",@(25)],即查询name=标哥,age=>25的数据; 可以为nil,为nil时查询所有数据; - 目前不支持keypath的key,即嵌套的自定义类, 形式如@[@"user.name",@"=",@"习大大"]暂不支持. + 目前不支持keypath的key,即嵌套的自定义类, 形式如@[@"user.name",@"=",@"习大大"]暂不支持(有专门的keyPath查询接口). */ -+(void)findAsync:(BOOL)async where:(NSArray* _Nullable)where complete:(Complete_A)complete; ++(NSArray* _Nullable)findWhere:(NSArray* _Nullable)where; +/** + 异步条件查询所有结果. + @where 条件数组,形式@[@"name",@"=",@"标哥",@"age",@"=>",@(25)],即查询name=标哥,age=>25的数据; + 可以为nil,为nil时查询所有数据; + 目前不支持keypath的key,即嵌套的自定义类, 形式如@[@"user.name",@"=",@"习大大"]暂不支持(有专门的keyPath查询接口). + */ ++(void)findAsyncWhere:(NSArray* _Nullable)where complete:(Complete_A)complete; /** keyPath查询 - @async YES:异步查询所有结果,NO:同步查询所有结果. - @keyPath 形式 @"user.student.name". - @value 值,形式 @“小芳” - 说明: 即查询 user.student.name=小芳的对象数据 (用于嵌套的自定义类) + 同步查询所有keyPath条件结果. + @keyPathValues数组,形式@[@"user.student.name",Equal,@"小芳",@"user.student.conten",Contains,@"书"] + 即查询user.student.name=@"小芳" 和 user.student.content中包含@“书”这个字符串的对象. + */ ++(NSArray* _Nullable)findForKeyPathAndValues:(NSArray* _Nonnull)keyPathValues; +/** + keyPath查询 + 异步查询所有keyPath条件结果. + @keyPathValues数组,形式@[@"user.student.name",Equal,@"小芳",@"user.student.conten",Contains,@"书"] + 即查询user.student.name=@"小芳" 和 user.student.content中包含@“书”这个字符串的对象. */ -+(void)findAsync:(BOOL)async forKeyPath:(NSString* _Nonnull)keyPath value:(id _Nonnull)value complete:(Complete_A)complete; ++(void)findAsyncForKeyPathAndValues:(NSArray* _Nonnull)keyPathValues complete:(Complete_A)complete; /** 同步更新数据. @where 条件数组,形式@[@"name",@"=",@"标哥",@"age",@"=>",@(25)],即更新name=标哥,age=>25的数据; 可以为nil,nil时更新所有数据; - 目前不支持keypath的key,即嵌套的自定义类, 形式如@[@"user.name",@"=",@"习大大"]暂不支持. + 不支持keypath的key,即嵌套的自定义类, 形式如@[@"user.name",@"=",@"习大大"]暂不支持. */ -(BOOL)updateWhere:(NSArray* _Nullable)where; /** - @async YES:异步更新,NO:同步更新. + 异步更新. @where 条件数组,形式@[@"name",@"=",@"标哥",@"age",@"=>",@(25)],即更新name=标哥,age=>25的数据; 可以为nil,nil时更新所有数据; - 目前不支持keypath的key,即嵌套的自定义类, 形式如@[@"user.name",@"=",@"习大大"]暂不支持. + 不支持keypath的key,即嵌套的自定义类, 形式如@[@"user.name",@"=",@"习大大"]暂不支持. */ --(void)updateAsync:(BOOL)async where:(NSArray* _Nullable)where complete:(Complete_B)complete; +-(void)updateAsync:(NSArray* _Nullable)where complete:(Complete_B)complete; +/** + 根据keypath更新数据. + 同步更新. + @keyPathValues数组,形式@[@"user.student.name",Equal,@"小芳",@"user.student.conten",Contains,@"书"] + 即更新user.student.name=@"小芳" 和 user.student.content中包含@“书”这个字符串的对象. + */ +-(BOOL)updateForKeyPathAndValues:(NSArray* _Nonnull)keyPathValues; +/** + 根据keypath更新数据. + 异步更新. + @keyPathValues数组,形式@[@"user.student.name",Equal,@"小芳",@"user.student.conten",Contains,@"书"] + 即更新user.student.name=@"小芳" 和 user.student.content中包含@“书”这个字符串的对象. + */ +-(void)updateAsyncForKeyPathAndValues:(NSArray* _Nonnull)keyPathValues complete:(Complete_B)complete; /** 同步删除数据. @where 条件数组,形式@[@"name",@"=",@"标哥",@"age",@"=>",@(25)],即删除name=标哥,age=>25的数据. 不可以为nil; - 目前不支持keypath的key,即嵌套的自定义类, 形式如@[@"user.name",@"=",@"习大大"]暂不支持 + 不支持keypath的key,即嵌套的自定义类, 形式如@[@"user.name",@"=",@"习大大"]暂不支持 */ +(BOOL)deleteWhere:(NSArray* _Nonnull)where; /** - @async YES:异步删除,NO:同步删除. + 异步删除. @where 条件数组,形式@[@"name",@"=",@"标哥",@"age",@"=>",@(25)],即删除name=标哥,age=>25的数据. 不可以为nil; - 目前不支持keypath的key,即嵌套的自定义类, 形式如@[@"user.name",@"=",@"习大大"]暂不支持 + 不支持keypath的key,即嵌套的自定义类, 形式如@[@"user.name",@"=",@"习大大"]暂不支持 + */ ++(void)deleteAsync:(NSArray* _Nonnull)where complete:(Complete_B)complete; +/** + 根据keypath删除数据. + 同步删除. + @keyPathValues数组,形式@[@"user.student.name",Equal,@"小芳",@"user.student.conten",Contains,@"书"] + 即删除user.student.name=@"小芳" 和 user.student.content中包含@“书”这个字符串的对象. + */ ++(BOOL)deleteForKeyPathAndValues:(NSArray* _Nonnull)keyPathValues; +/** + 根据keypath删除数据. + 异步删除. + @keyPathValues数组,形式@[@"user.student.name",Equal,@"小芳",@"user.student.conten",Contains,@"书"] + 即删除user.student.name=@"小芳" 和 user.student.content中包含@“书”这个字符串的对象. */ -+(void)deleteAsync:(BOOL)async where:(NSArray* _Nonnull)where complete:(Complete_B)complete; ++(void)deleteAsyncForKeyPathAndValues:(NSArray* _Nonnull)keyPathValues complete:(Complete_B)complete; /** 同步清除所有数据 */ +(BOOL)clear; /** - @async YES:异步清除所有数据,NO:同步清除所有数据. + 异步清除所有数据. */ -+(void)clearAsync:(BOOL)async complete:(Complete_B)complete; ++(void)clearAsync:(Complete_B)complete; /** 同步删除这个类的数据表 */ +(BOOL)drop; /** - @async YES:异步删除这个类的数据表,NO:同步删除这个类的数据表. + 异步删除这个类的数据表. */ -+(void)dropAsync:(BOOL)async complete:(Complete_B)complete; ++(void)dropAsync:(Complete_B)complete; /** 查询该表中有多少条数据 - @name 表名称. @where 条件数组,形式@[@"name",@"=",@"标哥",@"age",@"=>",@(25)],即name=标哥,age=>25的数据有多少条,为nil时返回全部数据的条数. + 不支持keypath的key,即嵌套的自定义类, 形式如@[@"user.name",@"=",@"习大大"]暂不支持(有专门的keyPath查询条数接口). */ +(NSInteger)countWhere:(NSArray* _Nullable)where; /** - 刷新,当类变量名称改变时,调用此接口刷新一下. - @async YES:异步刷新,NO:同步刷新. + keyPath查询该表中有多少条数据 + @keyPathValues数组,形式@[@"user.student.name",Equal,@"小芳",@"user.student.conten",Contains,@"书"] + 即查询user.student.name=@"小芳" 和 user.student.content中包含@“书”这个字符串的对象的条数. */ -+(void)refreshAsync:(BOOL)async complete:(Complete_I)complete; ++(NSInteger)countForKeyPathAndValues:(NSArray* _Nonnull)keyPathValues; +/** + 获取本类数据表当前版本号. + */ ++(NSInteger)version; +/** + 刷新,当类变量名称或"唯一约束"改变时,调用此接口刷新一下. + 同步刷新. + @version 版本号,从1开始,依次往后递增. + 说明: 本次更新版本号不得 低于或等于 上次的版本号,否则不会更新. + */ ++(dealState)updateVersion:(NSInteger)version; +/** + 刷新,当类变量名称或"唯一约束"改变时,调用此接口刷新一下. + 异步刷新. + @version 版本号,从1开始,依次往后递增. + 说明: 本次更新版本号不得 低于或等于 上次的版本号,否则不会更新. + */ ++(void)updateVersionAsync:(NSInteger)version complete:(Complete_I)complete; +/** + 刷新,当类变量名称或"唯一约束"改变时,调用此接口刷新一下. + 同步刷新. + @version 版本号,从1开始,依次往后递增. + @keyDict 拷贝的对应key集合,形式@{@"新Key1":@"旧Key1",@"新Key2":@"旧Key2"},即将本类以前的变量 “旧Key1” 的数据拷贝给现在本类的变量“新Key1”,其他依此推类. + (特别提示: 这里只要写那些改变了的变量名就可以了,没有改变的不要写),比如A以前有3个变量,分别为a,b,c;现在变成了a,b,d;那只要写@{@"d":@"c"}就可以了,即只写变化了的变量名映射集合. + 说明: 本次更新版本号不得 低于或等于 上次的版本号,否则不会更新. + */ ++(dealState)updateVersion:(NSInteger)version keyDict:(NSDictionary* const _Nonnull)keydict; +/** + 刷新,当类变量名称或"唯一约束"改变时,调用此接口刷新一下. + 异步刷新. + @version 版本号,从1开始,依次往后递增. + @keyDict 拷贝的对应key集合,形式@{@"新Key1":@"旧Key1",@"新Key2":@"旧Key2"},即将本类以前的变量 “旧Key1” 的数据拷贝给现在本类的变量“新Key1”,其他依此推类. + (特别提示: 这里只要写那些改变了的变量名就可以了,没有改变的不要写),比如A以前有3个变量,分别为a,b,c;现在变成了a,b,d;那只要写@{@"d":@"c"}就可以了,即只写变化了的变量名映射集合. + 说明: 本次更新版本号不得 低于或等于 上次的版本号,否则不会更新. + */ ++(void)updateVersion:(NSInteger)version keyDict:(NSDictionary* const _Nonnull)keydict complete:(Complete_I)complete; +/** + 将某表的数据拷贝给另一个表 + 同步复制. + @destCla 目标类. + @keyDict 拷贝的对应key集合,形式@{@"srcKey1":@"destKey1",@"srcKey2":@"destKey2"},即将源类srcCla中的变量值拷贝给目标类destCla中的变量destKey1,srcKey2和destKey2同理对应,依此推类. + @append YES: 不会覆盖destCla的原数据,在其末尾继续添加;NO: 覆盖掉destCla原数据,即将原数据删掉,然后将新数据拷贝过来. + */ ++(dealState)copyToClass:(__unsafe_unretained _Nonnull Class)destCla keyDict:(NSDictionary* const _Nonnull)keydict append:(BOOL)append; /** 将某表的数据拷贝给另一个表 - @async YES:异步复制,NO:同步复制. + 异步复制. @destCla 目标类. - @keyDict 拷贝的对应key集合,形式@{@"srcKey1":@"destKey1",@"srcKey2":@"destKey2"},即将源类srcCla中的变量值拷贝给目标类destCla中的变量destKey1,srcKey2和destKey2同理对应,以此推类. + @keyDict 拷贝的对应key集合,形式@{@"srcKey1":@"destKey1",@"srcKey2":@"destKey2"},即将源类srcCla中的变量值拷贝给目标类destCla中的变量destKey1,srcKey2和destKey2同理对应,依此推类. @append YES: 不会覆盖destCla的原数据,在其末尾继续添加;NO: 覆盖掉destCla原数据,即将原数据删掉,然后将新数据拷贝过来. */ -+(void)copyAsync:(BOOL)async toClass:(__unsafe_unretained _Nonnull Class)destCla keyDict:(NSDictionary* const _Nonnull)keydict append:(BOOL)append complete:(Complete_I)complete; ++(void)copyAsyncToClass:(__unsafe_unretained _Nonnull Class)destCla keyDict:(NSDictionary* const _Nonnull)keydict append:(BOOL)append complete:(Complete_I)complete; +/** + 事务操作. + @return 返回YES提交事务, 返回NO回滚事务. + */ ++(void)inTransaction:(BOOL (^_Nonnull)())block; +/** + 注册数据变化监听. + @name 注册名称,此字符串唯一,不可重复,移除监听的时候使用此字符串移除. + @return YES: 注册监听成功; NO: 注册监听失败. + */ ++(BOOL)registerChangeWithName:(NSString* const _Nonnull)name block:(ChangeBlock)block; +/** + 移除数据变化监听. + @name 注册监听的时候使用的名称. + @return YES: 移除监听成功; NO: 移除监听失败. + */ ++(BOOL)removeChangeWithName:(NSString* const _Nonnull)name;