Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/Haley-Wong/JKDBModel
FMDB的封装,极大简化你的数据库操作,对于自己的扩展也非常简单
https://github.com/Haley-Wong/JKDBModel
Last synced: 3 months ago
JSON representation
FMDB的封装,极大简化你的数据库操作,对于自己的扩展也非常简单
- Host: GitHub
- URL: https://github.com/Haley-Wong/JKDBModel
- Owner: Haley-Wong
- License: other
- Created: 2015-07-19T02:04:33.000Z (over 9 years ago)
- Default Branch: master
- Last Pushed: 2020-01-03T07:48:13.000Z (almost 5 years ago)
- Last Synced: 2024-07-01T17:11:44.744Z (5 months ago)
- Language: Objective-C
- Size: 165 KB
- Stars: 746
- Watchers: 24
- Forks: 197
- Open Issues: 30
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
README
# JKDBModel
FMDB的封装,极大简化你的数据库操作,对于自己的扩展也非常简单
封装类的数据库操作思路与多数FMDB封装不同,是直接实体类对象来做增、删、改、查。
代码中有比较详细的注释和讲解,有助于理解runtime的机制,如果能帮到你,麻烦给一个`star`。
对原作者的框架反射部分做了简化,便于理解,原作者的源码github地址在本文尾部。# 为什么要封装这个类呢?
原项目使用的是sqlitepersistentobjects,多线程处理时,问题比较多
多数FMDB框架功能比较多,代码量也比较大,但是很多功能不常用,而且也不便于理解,因此我考虑用简单易于理解的方式
来封装一个适用于公司项目的轻量级小框架。
因为项目需要在多线程下操作数据库,所以demo中的使用案例多数是多线程操作,但是单线程操作也适用。# 特点
改进后的特点如下:
1.自动创建数据库、自动创建数据库表。
2.自动检测字段添加新字段。
3.一行代码实现数据库的CURD操作。
4.源码及其简单,易于理解和掌握。
5.扩展自己的功能也非常得简单,容易。
6.支持多线程,非线程阻塞。
7.支持arc和mrc。# how 怎么使用JKDBModel
使用JKDBModel非常的简单,只需要将FMDB和DBModel拖入项目中,然后添加`libsqlite3.dylib`
然后让你的实体类继承自JKDBModel,你的实体类就具备了操作数据库的功能。# demo中有CURD演示操作
效果图
![](http://cc.cocimg.com/bbs/attachment/postcate/topic/16/313017_189_ccde14372754000f44c3edbcc68c9.png "CURD示例")## CURD操作
操作都有保存和批量保存两种方式。
例如
保存操作:`[user save]`
批量保存:`[User saveObjects:array]`# 数据库操作api
```Objective-C
/** 数据库中是否存在表 */
+ (BOOL)isExistInTable;
/** 保存或更新
* 如果不存在主键,保存,
* 有主键,则更新
*/
- (BOOL)saveOrUpdate;
/** 保存单个数据 */
- (BOOL)save;
/** 批量保存数据 */
+ (BOOL)saveObjects:(NSArray *)array;
/** 更新单个数据 */
- (BOOL)update;
/** 批量更新数据*/
+ (BOOL)updateObjects:(NSArray *)array;
/** 删除单个数据 */
- (BOOL)deleteObject;
/** 批量删除数据 */
+ (BOOL)deleteObjects:(NSArray *)array;
/** 通过条件删除数据 */
+ (BOOL)deleteObjectsByCriteria:(NSString *)criteria;
/** 清空表 */
+ (BOOL)clearTable;/** 查询全部数据 */
+ (NSArray *)findAll;/** 通过主键查询 */
+ (instancetype)findByPK:(int)inPk;/** 查找某条数据 */
+ (instancetype)findFirstByCriteria:(NSString *)criteria;/** 通过条件查找数据
* 这样可以进行分页查询 @" WHERE pk > 5 limit 10"
*/
+ (NSArray *)findByCriteria:(NSString *)criteria;
/**
* 创建表
* 如果已经创建,返回YES
*/
+ (BOOL)createTable;#pragma mark - must be override method
/** 如果子类中有一些property不需要创建数据库字段,那么这个方法必须在子类中重写
*/
+ (NSArray *)transients;
```
# 更新
修改了创建表和字段检测功能方法。
由于实际项目中,一个账号对应一个文件夹放数据库,经常会有切换账号登录的需求,在initialize创建数据库表,只执行一次,数据库不能保证一定创建,因此添加切换数据库功能,动态创建功能。 2015-08-25
添加条件查询和删除的新方法:
```
+ (instancetype)findFirstWithFormat:(NSString *)format, ...;+ (NSArray *)findWithFormat:(NSString *)format, ...;
/** 通过条件删除 (多参数)--2 */
+ (BOOL)deleteObjectsWithFormat:(NSString *)format, ...;
```
更新于2015-09-08# 提醒
SQLite 默认支持五种数据类型TEXT、INTEGER、REAL、BLOB、NULL,我只做了少数类型的判断,
如:int、unsigned int、short、unsigned short、BOOL,对象类型默认是字符串。
当然你可以详细的把所有的类型判断都做出来,代码中有部分常用的表示符号,详细的可以查看apple 文档。
理解代码比会使用代码更重要,望使用的时候先理解一下实现思路。# 鸣谢
动态获取Model的属性部分源自:https://github.com/li6185377/LKDaoBase
增删改查封装思想源自:`SQLitePersistentObject`,与之前做Java时的数据库操作类似,更简易。如果你有什么问题或者有更好的建议,请告知我,我会及时更正,修改。