Giter VIP home page Giter VIP logo

jkdbmodel's Introduction

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演示操作

效果图

CURD操作

操作都有保存和批量保存两种方式。
例如
保存操作:[user save]
批量保存:[User saveObjects:array]

数据库操作api

/** 数据库中是否存在表 */
+ (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时的数据库操作类似,更简易。

如果你有什么问题或者有更好的建议,请告知我,我会及时更正,修改。

jkdbmodel's People

Contributors

haley-wong avatar shutup avatar

Watchers

 avatar  avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.