All Projects → netyouli → Whc_modelsqlitekit

netyouli / Whc_modelsqlitekit

Licence: mit
专业的ORM数据库操作开源库,线程安全,高性能模型对象存储Sqlite开源库,真正实现一行代码操作数据库,让数据库存储变得简单 Professional database storage solutions, thread safe, high-performance model object storage Sqlite open source library, realize one line of code database operation, simple database storage

Projects that are alternatives of or similar to Whc modelsqlitekit

Bgfmdb
BGFMDB让数据的增删改查分别只需要一行代码即可,就是这么简单任性,本库几乎支持存储ios所有基本的自带数据类型.
Stars: ✭ 1,344 (+125.13%)
Mutual labels:  sqlite, realm
Android dbinspector
Android library for viewing and sharing in app databases.
Stars: ✭ 881 (+47.57%)
Mutual labels:  sqlite, db
Jvedio
Windows desktop application to manage local video;Support baidu AI, youdao translation;Support FFMPEG video processing;Support multi-database management and statistics;Support skin switching
Stars: ✭ 545 (-8.71%)
Mutual labels:  sqlite, db
db-sqlite
SQLite support for Yii
Stars: ✭ 15 (-97.49%)
Mutual labels:  sqlite, db
Android-ORM-Benchmarks
No description or website provided.
Stars: ✭ 25 (-95.81%)
Mutual labels:  realm, db
Myutils
🙏 提供时间轴转星座|生肖工具、系统存储空间获取工具、文件大小格式化工具、获取指定文件大小工具、AES加密解码工具(支持android端平台加密解密,java端和android端相互加密解密)、SharePreference操作工具、 File文件操作工具、日期获取和计算工具、界面跳转Intent操作工具、字符串验证和数值转换操作工具、手机震动工具、系统资源操作工具、网络检测工具、 wifi操作工具、单位换算工具、zip压缩和解压操作工具、XML解析操作工具(只支持几种指定格式)、图片加载和处理工具,数据库操作(增删改查)工具、Base64编码解码工具、MD5加密工具。
Stars: ✭ 130 (-78.22%)
Mutual labels:  sqlite, db
Node Sqlite
SQLite client for Node.js applications with SQL-based migrations API written in Typescript
Stars: ✭ 642 (+7.54%)
Mutual labels:  sqlite, db
Db
Data access layer for PostgreSQL, CockroachDB, MySQL, SQLite and MongoDB with ORM-like features.
Stars: ✭ 2,832 (+374.37%)
Mutual labels:  sqlite, db
react-native-quick-sqlite
Fast SQLite for react-native.
Stars: ✭ 239 (-59.97%)
Mutual labels:  sqlite, db
Unrealm
Unrealm is an extension on RealmCocoa, which enables Swift native types to be saved in Realm.
Stars: ✭ 425 (-28.81%)
Mutual labels:  realm, db
Adminer
Database management in a single PHP file
Stars: ✭ 4,999 (+737.35%)
Mutual labels:  sqlite
Go Sqlite3
sqlite3 driver for go using database/sql
Stars: ✭ 5,313 (+789.95%)
Mutual labels:  sqlite
Sqlitedb
Basic SQLite wrapper for Swift 4.x and lightweight ORM for accessing underlying tables in an SQLite database
Stars: ✭ 538 (-9.88%)
Mutual labels:  sqlite
Postfixadmin
PostfixAdmin - web based virtual user administration interface for Postfix mail servers
Stars: ✭ 509 (-14.74%)
Mutual labels:  sqlite
Datasette
An open source multi-tool for exploring and publishing data
Stars: ✭ 5,640 (+844.72%)
Mutual labels:  sqlite
Denodb
MySQL, SQLite, MariaDB, PostgreSQL and MongoDB ORM for Deno
Stars: ✭ 498 (-16.58%)
Mutual labels:  sqlite
Phpmyfaq
phpMyFAQ - Open Source FAQ web application for PHP and MySQL, PostgreSQL and other databases
Stars: ✭ 494 (-17.25%)
Mutual labels:  sqlite
Rbatis
Rust ORM Framework High Performance Rust SQL-ORM(JSON based)
Stars: ✭ 482 (-19.26%)
Mutual labels:  sqlite
Androidrapidlibrary
Android 快速开发库,主要想实现一条属于自己的开发框架。包括网络访问,数据,UI等等
Stars: ✭ 577 (-3.35%)
Mutual labels:  realm
Typeorm
ORM for TypeScript and JavaScript (ES7, ES6, ES5). Supports MySQL, PostgreSQL, MariaDB, SQLite, MS SQL Server, Oracle, SAP Hana, WebSQL databases. Works in NodeJS, Browser, Ionic, Cordova and Electron platforms.
Stars: ✭ 26,559 (+4348.74%)
Mutual labels:  sqlite

WHC_ModelSqliteKit

Build Status Pod Version Pod Platform Pod License

架构图

  • Professional database storage solutions, thread safe, high-performance model object storage Sqlite open source library, realize one line of code database operation, simple database storage
  • 专业的数据库存储解决方案,线程安全,高性能模型对象存储Sqlite开源库,真正实现一行代码操作数据库,让数据库存储变得简单

简介

  • 架构: 采用runtime和Sqlite完美结合打造的强大数据库操作引擎开源库
  • 安全: 支持数据库级别加密
  • 易用: 真正实现一行代码操作数据库
  • 目标: 替代直接使用Sqlite和CoreData以及FMDB低效率方式
  • 支持: (NSMutableDictionary,NSMutableArray,NSArray,NSDictionary,NSDate,NSData,NSString,NSNumber,Int,double,float,Bool,char)类型
  • 灵活: 支持使用Sqlite函数进行查询,支持忽略模型类属性存储数据表中
  • 强大: 支持模型嵌套继承模型类存储到数据库和多表嵌套复杂查询
  • 智能: 根据数据库模型类实现的WHC_SqliteInfo协议返回的版本号来智能更新数据库字段(动态删除/添加)
  • 咨询: 712641411
  • 作者: 吴海超

修复升级: 修复子模型对象为nil访问子模型属性崩溃bug

修复升级: 兼容支持存储NSMutableDictionary, NSMutableArray类型

修复升级: 支持自定义数据库存储路径

升级功能: 支持WHCSqlite操作使用其他方式创建的数据库比如FMDB,只需要指定数据库存储路径。 如果表名不是模型类名称需要指定表名, 详细使用可以参考提供demo,和WHC_SqliteInfo协议

多表嵌套复杂查询

/// 查询person名称为吴海超,并且person的汽车对象的名称为宝马或者person对象学校对象的所在城市对象的名称为北京
NSArray * result = [WHCSqlite query:[Person class] 
        where:@"name = '吴海超' and car.name = '宝马' or school.city.name = '北京'"];

自定义sql查询

persons = [WHCSqlite query:Person.self sql:@"select * from Person"];

/// 来个复杂的例如:
[WHCSqlite query:Model.self sql:@"select cc.* from 
     ( select tt.*,(select count(*)+1 from Chapter where chapter_id =tt.chapter_id and updateTime<tt.updateTime ) as group_id from Chapter tt)
     cc where cc.group_id<=7 order by updateTime desc"];

要求

  • iOS 5.0 or later
  • Xcode 8.0 or later

集成

  • 不需要加密使用: pod 'WHC_ModelSqliteKit'
  • 需要加密数据库使用: pod 'WHC_ModelSqliteKit/SQLCipher'

注意

  • 在需要对数据表自定义信息需要model类实现WHC_SqliteInfo协议
  • 当模型类有新增/删除属性的时候需要在模型类里定义类方法whc_SqliteVersion方法修改模型类(数据库)版本号来表明有字段更新操作,库会根据这个VERSION变更智能检查并自动更新数据库字段,无需手动更新数据库字段
  • 当存储NSArray/NSDictionary属性并且里面是自定义模型对象时,模型对象必须实现NSCoding协议,可以使用WHC_Model库一行代码实现NSCoding相关代码
  • 当需要模型类忽略属性存储数据表时实现whc_IgnorePropertys协议方法即可return要忽略属性名称数组
  • 好用的Mac开源工具:Json生成Class,扫描无用图片,扫描无用类,keyborad
  • 如果要获取主键id值需要在model里声明属性:@property (nonatomic, assign) NSInteger whcId; 或者自定义主键名称的属性
/// 数据库协议信息
@protocol WHC_SqliteInfo <NSObject>
@optional
/**
自定义数据存储路径
@return 自定义数据库路径(目录即可)
*/
+ (NSString *)whc_SqlitePath;

/// 自定义模型类数据库版本号
/** 注意:
***该返回值在改变数据模型属性类型/增加/删除属性时需要更改否则无法自动更新原来模型数据表字段以及类型***
*/
+ (NSString *)whc_SqliteVersion;

/// 自定义数据库加密密码
/** 注意:
***该加密功能需要引用SQLCipher三方库才支持***
/// 引入方式有:
*** 手动引入 ***
*** CocoaPods: pod 'WHC_ModelSqlite/SQLCipher' ***
*/
+ (NSString *)whc_SqlitePasswordKey;

/// 自定义数据表主键名称
/**
*** 返回自定义主键名称默认主键:_id ***
*/
+ (NSString *)whc_SqliteMainkey;

/**
忽略属性集合

@return 返回忽略属性集合
*/
+ (NSArray *)whc_IgnorePropertys;


/**
引入使用其他方式创建的数据库存储路径比如:FMDB
来使用WHC_Sqlite进行操作其他方式创建的数据库

@return 存储路径
*/
+ (NSString *)whc_OtherSqlitePath;


/**
指定自定义表名

在指定引入其他方式创建的数据库时,这个时候如果表名不是模型类名需要实现该方法指定表名称

@return 表名
*/
+ (NSString *)whc_TableName;

@end

用法

1.存储嵌套模型对象到数据库演示

Person * whc = [Person new];
whc.name = @"吴海超";
whc.age = 25;
whc.height = 180.0;
whc.weight = 140.0;
whc.isDeveloper = YES;
whc.sex = 'm';

// 嵌套car对象
whc.car = [Car new];
whc.car.name = @"撼路者";
whc.car.brand = @"大路虎";

// 嵌套school对象
whc.school = [School new];
whc.school.name = @"北京大学";
whc.school.personCount = 5000;

// school对象嵌套city对象
whc.school.city = [City new];
whc.school.city.name = @"北京";
whc.school.city.personCount = 1000;

/// 测试NSArray属性存储
Car * tempCar = [Car new];
tempCar.name = @"宝马";
tempCar.brand = @"林肯";
whc.array = @[@"1",@"2"];
whc.carArray = @[tempCar];

/// 测试NSDictionary属性存储
whc.dict = @{@"1":@"2"};
whc.dictCar = @{@"car": tempCar};

[WHCSqlite insert:whc];

2.存储批量模型对象到数据库演示

NSArray * persons = [self makeArrayPerson];
[WHCSqlite inserts:persons];

3.无条件查询(查询所有记录)数据库中模型类演示

NSArray * personArray = [WHCSqlite query:[Person class]];

3.1.使用Sqlite函数查询数据库演示

/// 获取Person表所有name和name长度
NSArray * nameArray = [WHCSqlite query:[Person class] func:@"name, length(name)"];
NSLog(@"nameArray = %@",nameArray);

/// 获取Person表最大age值
NSNumber * maxAge = [WHCSqlite query:[Person class] func:@"max(age)"];
NSLog(@"maxAge = %@",maxAge);

/// 获取Person表总记录数
NSNumber * sumCount = [WHCSqlite query:[Person class] func:@"count(*)"];
NSLog(@"sumCount = %@",sumCount);

/// 获取Person表字段school.city.name = 北京--0,总记录数
sumCount = [WHCSqlite query:[Person class] func:@"count(*)" condition:@"where school.city.name = '北京--0'"];
NSLog(@"sumCount = %@",sumCount);

4.条件查询数据库中模型类演示(where 条件查询语法和sql where条件查询语法一样)

NSArray * personArray = [WHCSqlite query:[Person class] where:@"name = '吴海超2' OR age <= 18"];

5.查询数据库并对结果排序

///对person数据表查询并且根据age自动降序或者升序排序
[WHCSqlite query:[Person class] order:@"by age desc/asc"];

6.查询数据库并对结果限制查询条数

/// 对person数据表查询并且并且限制查询数量为8
[WHCSqlite query:[Person class] limit:@"8"];

/// 对person数据表查询并且对查询列表偏移8并且限制查询数量为8
[WHCSqlite query:[Person class] limit:@"8 offset 8"];

7.修改数据库中模型对象演示(where 条件查询语法和sql where条件查询语法一样)

/// 更新整条记录
[WHCSqlite update:whc where:@"name = '吴海超2' OR age <= 18"];
/// 更新整条记录中的指定字段(更新Person表在age字段大于25岁时name值为whc,age为100岁)
[WHCSqlite update:Person.self value:@"name = 'whc', age = 100" where:@"age > 25"];

8.删除数据库中模型对象演示(where条件查询为空则删除所有)

[WHCSqlite delete:[Person class] where:@"age = 25 AND name = '吴海超'"];

9.清空指定数据库演示

[WHCSqlite clear:[Person class]];

10.删除数据库演示

[WHCSqlite removeModel:[Person class]];

11.删除所有数据库演示

[WHCSqlite removeAllModel];

12.获取数据库本地路径演示

NSString * path = [WHCSqlite localPathWithModel:[Person class]];

13.获取数据库本地版本号演示

NSString * path = [WHCSqlite versionWithModel:[Person class]];

期待

  • 如果您在使用过程中有任何问题,欢迎issue me! 很乐意为您解答任何相关问题!
  • 与其给我点star,不如向我狠狠地抛来一个BUG!
  • 如果您想要更多的接口来自定义或者建议/意见,欢迎issue me!我会根据大家的需求提供更多的接口!

Api文档

/**
* 说明: 存储模型数组到本地(事务方式)
* @param model_array 模型数组对象(model_array 里对象类型要一致)
*/

+ (BOOL)inserts:(NSArray *)model_array;

/**
* 说明: 存储模型到本地
* @param model_object 模型对象
*/

+ (BOOL)insert:(id)model_object;


/**
* 说明: 获取模型类表总条数
* @param model_class 模型类
* @return 总条数
*/
+ (NSUInteger)count:(Class)model_class;

/**
* 说明: 查询本地模型对象
* @param model_class 模型类
* @return 查询模型对象数组
*/

+ (NSArray *)query:(Class)model_class;

/**
* 说明: 查询本地模型对象
* @param model_class 模型类
* @param where 查询条件(查询语法和SQL where 查询语法一样,where为空则查询所有)
* @return 查询模型对象数组
*/

+ (NSArray *)query:(Class)model_class where:(NSString *)where;

/**
* 说明: 查询本地模型对象
* @param model_class 模型类
* @param order 排序条件(排序语法和SQL order 查询语法一样,order为空则不排序)
* @return 查询模型对象数组
*/

/// example: [WHCSqlite query:[Person class] order:@"by age desc/asc"];
/// 对person数据表查询并且根据age自动降序或者升序排序

+ (NSArray *)query:(Class)model_class order:(NSString *)order;

/**
* 说明: 查询本地模型对象
* @param model_class 模型类
* @param limit 限制条件(限制语法和SQL limit 查询语法一样,limit为空则不限制查询)
* @return 查询模型对象数组
*/

/// example: [WHCSqlite query:[Person class] limit:@"8"];
/// 对person数据表查询并且并且限制查询数量为8
/// example: [WHCSqlite query:[Person class] limit:@"8 offset 8"];
/// 对person数据表查询并且对查询列表偏移8并且限制查询数量为8

+ (NSArray *)query:(Class)model_class limit:(NSString *)limit;

/**
* 说明: 查询本地模型对象
* @param model_class 模型类
* @param where 查询条件(查询语法和SQL where 查询语法一样,where为空则查询所有)
* @param order 排序条件(排序语法和SQL order 查询语法一样,order为空则不排序)
* @return 查询模型对象数组
*/

/// example: [WHCSqlite query:[Person class] where:@"age < 30" order:@"by age desc/asc"];
/// 对person数据表查询age小于30岁并且根据age自动降序或者升序排序

+ (NSArray *)query:(Class)model_class where:(NSString *)where order:(NSString *)order;

/**
* 说明: 查询本地模型对象
* @param model_class 模型类
* @param where 查询条件(查询语法和SQL where 查询语法一样,where为空则查询所有)
* @param limit 限制条件(限制语法和SQL limit 查询语法一样,limit为空则不限制查询)
* @return 查询模型对象数组
*/

/// example: [WHCSqlite query:[Person class] where:@"age <= 30" limit:@"8"];
/// 对person数据表查询age小于30岁并且限制查询数量为8
/// example: [WHCSqlite query:[Person class] where:@"age <= 30" limit:@"8 offset 8"];
/// 对person数据表查询age小于30岁并且对查询列表偏移8并且限制查询数量为8

+ (NSArray *)query:(Class)model_class where:(NSString *)where limit:(NSString *)limit;

/**
* 说明: 查询本地模型对象
* @param model_class 模型类
* @param order 排序条件(排序语法和SQL order 查询语法一样,order为空则不排序)
* @param limit 限制条件(限制语法和SQL limit 查询语法一样,limit为空则不限制查询)
* @return 查询模型对象数组
*/

/// example: [WHCSqlite query:[Person class] order:@"by age desc/asc" limit:@"8"];
/// 对person数据表查询并且根据age自动降序或者升序排序并且限制查询的数量为8
/// example: [WHCSqlite query:[Person class] order:@"by age desc/asc" limit:@"8 offset 8"];
/// 对person数据表查询并且根据age自动降序或者升序排序并且限制查询的数量为8偏移为8

+ (NSArray *)query:(Class)model_class order:(NSString *)order limit:(NSString *)limit;

/**
* 说明: 查询本地模型对象
* @param model_class 模型类
* @param where 查询条件(查询语法和SQL where 查询语法一样,where为空则查询所有)
* @param order 排序条件(排序语法和SQL order 查询语法一样,order为空则不排序)
* @param limit 限制条件(限制语法和SQL limit 查询语法一样,limit为空则不限制查询)
* @return 查询模型对象数组
*/

/// example: [WHCSqlite query:[Person class] where:@"age <= 30" order:@"by age desc/asc" limit:@"8"];
/// 对person数据表查询age小于30岁并且根据age自动降序或者升序排序并且限制查询的数量为8
/// example: [WHCSqlite query:[Person class] where:@"age <= 30" order:@"by age desc/asc" limit:@"8 offset 8"];
/// 对person数据表查询age小于30岁并且根据age自动降序或者升序排序并且限制查询的数量为8偏移为8

+ (NSArray *)query:(Class)model_class where:(NSString *)where order:(NSString *)order limit:(NSString *)limit;


/**
说明: 自定义sql查询

@param model_class 接收model类
@param sql sql语句
@return 查询模型对象数组

/// example: [WHCSqlite query:Model.self sql:@"select cc.* from ( select tt.*,(select count(*)+1 from Chapter where chapter_id =tt.chapter_id and updateTime<tt.updateTime ) as group_id from Chapter tt) cc where cc.group_id<=7 order by updateTime desc"];
*/
+ (NSArray *)query:(Class)model_class sql:(NSString *)sql;

/**
* 说明: 利用sqlite 函数进行查询

* @param model_class 要查询模型类
* @param sqliteFunc sqlite函数例如:(MAX(age),MIN(age),COUNT(*)....)
* @return 返回查询结果(如果结果条数 > 1返回Array , = 1返回单个值 , = 0返回nil)
* /// example: [WHCSqlite query:[Person class] sqliteFunc:@"max(age)"];  /// 获取Person表的最大age值
* /// example: [WHCSqlite query:[Person class] sqliteFunc:@"count(*)"];  /// 获取Person表的总记录条数
*/
+ (id)query:(Class)model_class func:(NSString *)func;

/**
* 说明: 利用sqlite 函数进行查询

* @param model_class 要查询模型类
* @param sqliteFunc sqlite函数例如:(MAX(age),MIN(age),COUNT(*)....)
* @param condition 其他查询条件例如:(where age > 20 order by age desc ....)
* @return 返回查询结果(如果结果条数 > 1返回Array , = 1返回单个值 , = 0返回nil)
* /// example: [WHCSqlite query:[Person class] sqliteFunc:@"max(age)" condition:@"where name = '北京'"];  /// 获取Person表name=北京集合中的的最大age值
* /// example: [WHCSqlite query:[Person class] sqliteFunc:@"count(*)" condition:@"where name = '北京'"];  /// 获取Person表name=北京集合中的总记录条数
*/
+ (id)query:(Class)model_class func:(NSString *)func condition:(NSString *)condition;

/**
* 说明: 更新本地模型对象
* @param model_object 模型对象
* @param where 查询条件(查询语法和SQL where 查询语法一样,where为空则更新所有)
*/

+ (BOOL)update:(id)model_object where:(NSString *)where;


/**
说明: 更新数据表字段

@param model_class 模型类
@param value 更新的值
@param where 更新条件
@return 是否成功
/// 更新Person表在age字段大于25岁是的name值为whc,age为100岁
/// example: [WHCSqlite update:Person.self value:@"name = 'whc', age = 100" where:@"age > 25"];
*/
+ (BOOL)update:(Class)model_class value:(NSString *)value where:(NSString *)where;

/**
* 说明: 清空本地模型对象
* @param model_class 模型类
*/

+ (BOOL)clear:(Class)model_class;


/**
* 说明: 删除本地模型对象
* @param model_class 模型类
* @param where 查询条件(查询语法和SQL where 查询语法一样,where为空则删除所有)
*/

+ (BOOL)delete:(Class)model_class where:(NSString *)where;

/**
* 说明: 清空所有本地模型数据库
*/

+ (void)removeAllModel;

/**
* 说明: 清空指定本地模型数据库
* @param model_class 模型类
*/

+ (void)removeModel:(Class)model_class;

/**
* 说明: 返回本地模型数据库路径
* @param model_class 模型类
* @return 路径
*/

+ (NSString *)localPathWithModel:(Class)model_class;

/**
* 说明: 返回本地模型数据库版本号
* @param model_class 模型类
* @return 版本号
*/
+ (NSString *)versionWithModel:(Class)model_class;

Licenses

All source code is licensed under the MIT License.

Note that the project description data, including the texts, logos, images, and/or trademarks, for each open source project belongs to its rightful owner. If you wish to add or remove any projects, please contact us at [email protected].