Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/li6185377/LKDBHelper-SQLite-ORM
全自动的插入,查询,更新,删除, an automatic database operation thread-safe and not afraid of recursive deadlock
https://github.com/li6185377/LKDBHelper-SQLite-ORM
Last synced: 3 months ago
JSON representation
全自动的插入,查询,更新,删除, an automatic database operation thread-safe and not afraid of recursive deadlock
- Host: GitHub
- URL: https://github.com/li6185377/LKDBHelper-SQLite-ORM
- Owner: li6185377
- License: mit
- Created: 2013-04-15T12:31:09.000Z (over 11 years ago)
- Default Branch: master
- Last Pushed: 2022-08-17T09:19:06.000Z (about 2 years ago)
- Last Synced: 2024-05-17T21:44:57.146Z (6 months ago)
- Language: Objective-C
- Homepage:
- Size: 1.15 MB
- Stars: 1,201
- Watchers: 56
- Forks: 287
- Open Issues: 1
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
- Awesome-iOS - LKDBHelper - 全自动的插入,查询,更新,删除, an automatic database operation thread-safe and not afraid of recursive deadlock (Database, ORM, Cache)
README
LKDBHelper
====================================
this is sqlite ORM (an automatic database operation)
thread-safe and not afraid of recursive deadlock简书:不定时更新 [http://www.jianshu.com/users/376b950a20ec](http://www.jianshu.com/users/376b950a20ec/latest_articles)
# Big Upgrade 2.0
Supported __NSArray__,__NSDictionary__, __ModelClass__, __NSNumber__, __NSString__, __NSDate__, __NSData__, __UIColor__, __UIImage__, __CGRect__, __CGPoint__, __CGSize__, __NSRange__, __int__,__char__,__float__, __double__, __long__.. attribute to insert and select automation.
全面支持 __NSArray__,__NSDictionary__, __ModelClass__, __NSNumber__, __NSString__, __NSDate__, __NSData__, __UIColor__, __UIImage__, __CGRect__, __CGPoint__, __CGSize__, __NSRange__, __int__,__char__,__float__, __double__, __long__.. 等属性的自动化操作(插入和查询)
------------------------------------
Requirements
====================================* iOS 4.3+
* ARC only
* FMDB(https://github.com/ccgus/fmdb)## Adding to your project
If you are using CocoaPods, then, just add this line to your Podfile
```objective-c
pod 'LKDBHelper'
```If you are using encryption, Order can not be wrong
```objective-c
pod 'FMDB/SQLCipher'
pod 'LKDBHelper'
```@property(strong,nonatomic)NSString* encryptionKey;
## Basic usage
1. Create a new Objective-C class for your data model
```objective-c
@interface LKTest : NSObject
@property (nonatomic, copy) NSURL *url;
@property (nonatomic, copy) NSString *name;
@property (nonatomic, assign) NSUInteger age;
@property (nonatomic, assign) BOOL isGirl;@property (nonatomic, strong) LKTestForeign *address;
@property (nonatomic, strong) NSArray *blah;
@property (nonatomic, strong) NSDictionary *hoho;@property (nonatomic, assign) char like;
...
```
2. in the *.m file, overwirte getTableName function (option)```objective-c
+ (NSString *)getTableName {
return @"LKTestTable";
}
```
3. in the *.m file, overwirte callback function (option)```objective-c
@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. Initialize your model with data and insert to database```objective-c
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 ...```objective-c
select:
NSMutableArray *array = [LKTest searchWithWhere:nil orderBy:nil offset:0 count:100];
for (id obj in array) {
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. Description of parameters "where"```objective-c
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'"
```## table mapping
overwirte getTableMapping Function (option)
```objective-c
//手动or自动 绑定sql列
+ (NSDictionary *)getTableMapping {
return @{ @"name" : LKSQL_Mapping_Inherit,
@"MyAge" : @"age",
@"img" : LKSQL_Mapping_Inherit,
@"MyDate" : @"date",
// version 2 after add
@"color" : LKSQL_Mapping_Inherit,
//version 3 after add
@"address" : LKSQL_Mapping_UserCalculate,
@"error" : LKSQL_Mapping_Inherit
};
}
```## table update (option)
```objective-c
// 表结构更新回调
+ (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];
}];
}
}
LKErrorLog(@"your know %@", columns);
}
```
## set column attribute (option)```objective-c
// 定制化列属性
+ (void)columnAttributeWithProperty:(LKDBProperty *)property {
if ([property.sqlColumnName isEqualToString:@"MyAge"]) {
property.defaultValue = @"15";
} else if ([property.propertyName isEqualToString:@"date"]) {
// if you use unique,this property will also become the primary key
// property.isUnique = YES;
property.checkValue = @"MyDate > '2000-01-01 00:00:00'";
property.length = 30;
}
}
```## demo screenshot
![demo screenshot](https://github.com/li6185377/LKDBHelper-SQLite-ORM/raw/master/screenshot/Snip20130620_8.png)
table test data
![](https://github.com/li6185377/LKDBHelper-SQLite-ORM/raw/master/screenshot/Snip20130620_6.png)
foreign key data
![](https://github.com/li6185377/LKDBHelper-SQLite-ORM/raw/master/screenshot/Snip20130620_7.png)----------
# Use in swiftRemember to override the class function `getTableName` for model.
Change-log
==========**Version 1.1** @ 2012-6-20
- automatic table mapping
- support optional columns
- support column attribute settings
- you can return column content**Version 1.0** @ 2013-5-19
- overwrite and rename LKDBHelper
- property type support: UIColor,NSDate,UIImage,NSData,CGRect,CGSize,CGPoint,int,float,double,NSString,short,char,bool,NSInterger..
- fix a recursive deadlock.
- rewrite the asynchronous operation -
- thread-safe
- various bug modified optimize cache to improve performance
- test and demos
- bug fixes, speed improvements**Version 0.0.1** @ 2012-10-1
- Initial release with LKDAOBase
-------
License
=======This code is distributed under the terms and conditions of the MIT license.
-------
Contribution guidelines
=======* if you are fixing a bug you discovered, please add also a unit test so I know how exactly to reproduce the bug before merging
-------
Contributors
=======Author: Jianghuai Li
Contributors: waiting for you to join