LKDBHelper

一个sqlite ORM(全自动操作数据库)框架。
线程安全、不再担心递归锁死的问题

安装要求

  • iOS 4.3+
  • 仅支持 ARC
  • FMDB

添加到你的项目

如果你使用 CocoaPods,直接添加下面的代码到你的 Podfile文件

    pod 'LKDBHelper'

使用 Encryption,添加下面的代码(顺序不能错)

    pod 'FMDB/SQLCipher'
pod 'LKDBHelper'

@property(strong,nonatomic)NSString* encryptionKey;

基础用法

  1. 创建一个 Objective-C类,作为 data model

     @interface LKTest : NSObject
    @property(copy,nonatomic)NSString* name;
    @property NSUInteger age;
    @property BOOL isGirl; @property(strong,nonatomic)LKTestForeign* address;
    @property(strong,nonatomic)NSArray* blah;
    @property(strong,nonatomic)NSDictionary* hoho; @property char like;
    ...
  2. 在 .m文件中重写 getTableName 方法(可选)

     +(NSString *)getTableName
    {
    return @"LKTestTable";
    }
  3. 在 .m文件中重写回调方法(可选)

     @interface NSObject(LKDBHelper_Delegate)
    
     +(void)dbDidCreateTable:(LKDBHelper*)helper tableName:(NSString*)tableName;
    +(void)dbDidAlterTable:(LKDBHelper*)helper tableName:(NSString*)tableName addColumns:(NSArray*)columns; +(BOOL)dbWillInsert:(NSObject*)entity;
    +(void)dbDidInserted:(NSObject*)entity result:(BOOL)result; +(BOOL)dbWillUpdate:(NSObject*)entity;
    +(void)dbDidUpdated:(NSObject*)entity result:(BOOL)result; +(BOOL)dbWillDelete:(NSObject*)entity;
    +(void)dbDidDeleted:(NSObject*)entity result:(BOOL)result; ///data read finish
    +(void)dbDidSeleted:(NSObject*)entity; @end
  4. 初始化你的 model,赋值后插入数据库

      LKTestForeign* foreign = [[LKTestForeign alloc]init];
    foreign.address = @":asdasdasdsadasdsdas";
    foreign.postcode = 123341;
    foreign.addid = 213214; //插入数据 insert table row
    LKTest* test = [[LKTest alloc]init];
    test.name = @"zhan san";
    test.age = 16; //外键 foreign key
    test.address = foreign;
    test.blah = @[@"1",@"2",@"3"];
    test.blah = @[@"0",@[@1],@{@"2":@2},foreign];
    test.hoho = @{@"array":test.blah,@"foreign":foreign,@"normal":@123456,@"date":[NSDate date]}; //同步 插入第一条 数据 Insert the first
    [test saveToDB];
    //or
    //[globalHelper insertToDB:test];
  5. select、delete、update、isExists、rowCount ...

     select:
    
     NSMutableArray* array = [LKTest searchWithWhere:nil orderBy:nil offset:0 count:100];
    for (id obj in arraySync) {
    addText(@"%@",[obj printAllPropertys]);
    } delete: [LKTest deleteToDB:test]; update: test.name = "rename";
    [LKTest updateToDB:test where:nil]; isExists: [LKTest isExistsWithModel:test]; rowCount: [LKTest rowCountWithWhere:nil];
  6. 参数描述 “where”

      For example: 
    
         single:  @"rowid = 1"                         or      @{@"rowid":@1}
    
         more:    @"rowid = 1 and sex = 0"             or      @{@"rowid":@1,@"sex":@0}
    
                     when where is "or" type , such as @"rowid = 1 or sex = 0"
    you only use NSString array: @"rowid in (1,2,3)" or @{@"rowid":@[@1,@2,@3]} composite: @"rowid in (1,2,3) and sex=0 " or @{@"rowid":@[@1,@2,@3],@"sex":@0} If you want to be judged , only use NSString
    For example: @"date >= '2013-04-01 00:00:00'"

表结构映射

重写 getTableMapping 方法(可选)

    +(NSDictionary *)getTableMapping
{
//return nil
return @{@"name":LKSQLInherit,
@"MyAge":@"age",
@"img":LKSQLInherit,
@"MyDate":@"date",
@"color":LKSQLInherit,
@"address":LKSQLUserCalculate};
}

更新表(可选)

    +(void)dbDidAlterTable:(LKDBHelper *)helper tableName:(NSString *)tableName addColumns:(NSArray *)columns
{
for (int i=0; i<columns.count; i++)
{
LKDBProperty* p = [columns objectAtIndex:i];
if([p.propertyName isEqualToString:@"error"])
{
[helper executeDB:^(FMDatabase *db) {
NSString* sql = [NSString stringWithFormat:@"update %@ set error = name",tableName];
[db executeUpdate:sql];
}];
}
}
}

设置列属性(可选)

    +(void)columnAttributeWithProperty:(LKDBProperty *)property
{
if([property.sqlColumnName isEqualToString:@"MyAge"])
{
property.defaultValue = @"15";
}
if([property.propertyName isEqualToString:@"date"])
{
property.isUnique = YES;
property.checkValue = @"MyDate > '2000-01-01 00:00:00'";
property.length = 30;
}
}

demo 截屏

 

测试表数据

 

外键数据

 

github 原文地址

https://github.com/li6185377/LKDBHelper-SQLite-ORM


 

iOS sqlite ORM框架-LKDBHelper的更多相关文章

  1. Asp.net 高性能 Sqlite ORM 框架之 sqliteSugar

    一.介简 easyliter框架的升级版本,并且正式命名为SqliteSugar框架,另外Sugar系列还有 MySql和MsSql版本,Oracle版本待开发中(因为客户端太大一直在忧郁当中) 用S ...

  2. Android SQLite ORM框架greenDAO在Android Studio中的配置与使用

    博客: 安卓之家 微博: 追风917 CSDN: 蒋朋的家 简书: 追风917 博客园: 追风917 # 说明 greenDAO是安卓中处理SQLite数据库的一个开源的库,详情见其官网:我是官网 详 ...

  3. FMDB是iOS平台的SQLite数据库框架

    1.FMDB简介 什么是FMDBFMDB是iOS平台的SQLite数据库框架 FMDB以OC的方式封装了SQLite的C语言API 为什么使用FMDB使用起来更加面向对象,省去了很多麻烦.冗余的C语言 ...

  4. sqlite表结构动态读取工具(Chole ORM框架)

    Chole ORM框架 sqlIte于嵌入式数据库读取比较有利,不需要安装office也可以进行,可以在服务器系统当中使用. 所以我开发了这款工具,然后就是为了动态的读取表结构,然后根据表结构加载所有 ...

  5. 使用iOS原生sqlite3框架对sqlite数据库进行操作

    摘要: iOS中sqlite3框架可以很好的对sqlite数据库进行支持,通过面向对象的封装,可以更易于开发者使用. 使用iOS原生sqlite3框架对sqlite数据库进行操作 一.引言 sqlit ...

  6. 最好的5个Android ORM框架

    在开发Android应用时,保存数据有这么几个方式, 一个是本地保存,一个是放在后台(提供API接口),还有一个是放在开放云服务上(如 SyncAdapter 会是一个不错的选择). 对于第一种方式, ...

  7. 推荐的Android ORM框架

    1. OrmLite OrmLite 不是 Android 平台专用的ORM框架,它是Java ORM.支持JDBC连接,Spring以及Android平台.语法中广泛使用了注解(Annotation ...

  8. 最受欢迎的5个Android ORM框架

    在开发Android应用时,保存数据有这么几个方式, 一个是本地保存,一个是放在后台(提供API接口),还有一个是放在开放云服务上(如 SyncAdapter 会是一个不错的选择). 对于第一种方式, ...

  9. [Android]Android端ORM框架——RapidORM(v2.1)

    以下内容为原创,欢迎转载,转载请注明 来自天天博客:http://www.cnblogs.com/tiantianbyconan/p/6020412.html [Android]Android端ORM ...

随机推荐

  1. 黑苹果 macOS 10.13.6 17G66 安装 nVidia WebDriver

    目前很多N卡的WebDriver已经不支持macOS 10.14了,只能停留在10.13.6,苹果AppStore下载的 macOS High Sierra 10.13.6 版本号是17G66,遗憾的 ...

  2. deepin镜像 mxlinux镜像 ubuntu镜像桌面版

    百度网盘https://pan.baidu.com/s/18HX4XgXRMXFho036tuP-Hw

  3. C# ThreadPool 线程池

    Thread与ThreadPool Thread: .NetFramework1.0  对线程对象的一个封装 Thread方法很多很强大,但是太过强大,而且没有限制 功能繁多,反而用不好--就像给4岁 ...

  4. 精通awk系列(1):安装新版本的gawk

    回到: Linux系列文章 Shell系列文章 Awk系列文章 安装新版本gawk awk有很多种版本,例如nawk.gawk.gawk是GNU awk,它的功能很丰富. 本教程采用的是gawk 4. ...

  5. 三大框架知识点比较(Angular, Vue, React)

    点击左键 => 拖拽图片 => 新标签页查看图片 => 放大拖拽查阅

  6. JS基础语法---String(字符串的案例)

    练习1: var str = "我的宝宝最可爱,声音嗲嗲的"; var key = "可爱"; //先获取要截取的字符串的索引位置 var index = st ...

  7. 升鲜宝V2.0_杭州生鲜配送行业,升鲜宝供应链B端订货系统使用说明_升鲜宝生鲜供应链管理系统_15382353715_余东升

    升鲜宝V2.0_杭州生鲜配送行业,升鲜宝供应链B端订货系统使用说明_升鲜宝生鲜供应链管理系统_15382353715             升鲜宝生鲜配送供应链系统经过这些年的发展,形成一套独特的订 ...

  8. ImageView设置rounded corner

    版权声明:本文为xing_star原创文章,转载请注明出处! 本文同步自http://javaexception.com/archives/207 ImageView设置rounded corner ...

  9. Reinforcement Learning by Sutton 第三章习题答案

    好不容易写完了 想看全部的欢迎点击下面的github https://github.com/LyWangPX/Solutions-of-Reinforcement-Learning-An-Introd ...

  10. August 11th, 2019. Week 33rd, Sunday

    Worry does not empty tomorrow of its sorrow. It empties today of its strength. 忧虑不会消除明天的痛苦,它只会削弱今天的力 ...