发明内容
本发明要解决的技术问题是针对上述现有技术的不足,提供一种能够支持模型制表,支持多线程安全和事务回滚,操作简便,无需人工记忆和输入SQL语句,封装可靠,耦合度低,适用范围广以及复用性高的数据库架构方法和框架。
为了实现上述目的,本发明采用的技术方案为:
一种数据库架构方法,所述方法包括:
建立新模型基础类和扩展对象基础类,用于满足单继承和多继承场景下的数据库使用,使得通过对象进行数据库操作;
扩展所述新模型基础类,用于将结构化查询语言的语句自动化、格式化或者模块化,以便所述新模型基础类和扩展后的所述对象基础类的结构化查询语言的语句调用。
进一步地,所述方法还包括配置数据库,用于共享数据库对象或验证对应表是否存在。
进一步地,所述配置数据库包括:在数据库启动时,调用或配置数据库名;调用或配置数据库路径;单例化数据库对象;单例化同步队列。
进一步地,所述新模型基础类中包括如下定义:属性列表解析;字段约束;数据库动作;
所述扩展对象基础类中包括如下定义:主键自增;属性列表解析;字段约束;数据库动作。
进一步地,所述属性列表解析包括采用扩充C的面向对象编程语言底层的运行时特性,将映射类属性列表和属性类型列表一一对应转换为本数据库对应的格式和属性。
进一步地,所述字段约束包括设定忽略字段和利用结构化查询语言关键字针对一个字段进行约束;
所述数据库动作包括:抽象结构化查询语言语句;封装所述抽象结构化查询语言语句结果。
一种数据库框架,所述框架包括:
配置层,用于配置数据库相关,以共享数据库对象或验证对应表是否存在;
模型层,用于建立相关基础类,满足单继承和多继承场景下的数据库使用,使得通过对象进行数据库操作。
进一步地,所述模型层包括:
新模型基础类模块,用于建立新模型基础类执行属性列表解析;字段约束;数据库动作;
对象基础类扩展模块,用于扩展对象基础类执行主键自增;属性列表解析;字段约束;数据库动作。
进一步地,所述配置层包括:
调用配置模块,用于在数据库启动时,执行数据库名调用或配置,数据库路径调用或配置;
单例化模块,用于将数据库对象、同步队列单例化。
进一步地,所述模型层还包括新模型基础类扩展模块,用于扩展所述新模型基础类,将结构化查询语言的语句自动化、格式化或者模块化,以便所述新模型基础类和扩展后的所述对象基础类的结构化查询语言的语句调用。
采用上述技术方案后,本发明的有益效果是:1、通过建立新模型基础类,实现了单继承场景下通过对象进行数据库操作,使数据库支持模型制表,通过扩展原有FMDB中的对象基础类,实现了多继承场景下也能够通过对象进行数据库操作;从而扩大了数据库适用范围;
2、通过扩展所述新模型基础类,将结构化查询语言的语句自动化、格式化或者模块化以备调用,使得无需人工记忆和输入SQL语句即可实现数据库操作,提高了开发效率的同时节约了开发成本;
3、通过在数据库启动时,调用或配置数据库名;调用或配置数据库路径;单例化数据库对象;单例化同步队列;使得数据库支持多线程安全和事务回滚;
4、通过采用扩充C的面向对象编程语言底层的运行时特性进行属性列表解析,实现了SQL语句的直接调用,且更好的保障数据库不必每对一张表进行维护,直接通过模型建表的功能。
具体实施方式
以下是本发明的具体实施例并结合附图,对本发明的技术方案作进一步的描述,但本发明并不限于这些实施例。
现有的FMDB框架是iOS开发中常用的数据库框架,它以Objective-C的方式封装了SQLite的C语言API,使用起来更加面向对象,省去了很多麻烦的、冗余的C代码,对比苹果自带的CoreData框架,更加轻量和灵活。但还是无法脱离SQL语句操作,这对不熟悉数据库的操作人员来说相对困难,对熟悉的技术人来说操作也偏繁琐,另外现有的FMDB框架不能通过模型直接制表,需要对每张表进行维护,而每张表都没有近几百行的代码,维护麻烦,开发成本高。
本发明目的就是解决以上这些缺陷,使数据库操作更轻便灵活,提高开发效率。
实施例1
本实施例提供一种数据库架构方法,所述方法包括:
建立新模型基础类和扩展对象基础类,用于满足单继承和多继承场景下的数据库使用,使得通过对象进行数据库操作;
鉴于现有FMDB框架下数据库无法通过对象直接进行建表,本实施例中,对现有FMDB框架进行了再一层的封装,建立一个新模型基础类——XTDBModel,该XTDBModel继承了原数据框架下的表,同时用代码实现封装了各种数据库操作的方法,这样能够使得数据库操作直接通过一个对象就能够进行建表,进行数据库***、删除、查询、更新等操作。
例如:
如此一来数据库操作会十分便利,只要将自定义的实体类继承自XTDBModel,就可以开始操作数据库。
进一步地,由于现有FMDB框架中扩充C的面向对象编程语言(Objective-C)中不支持多继承场景,多继承就是指子类需要继承多个父类的场景,即现有FMDB框架不支持多继承的子类继承XTDBModel,无法进行后续的数据库操作;为了支持继承了多个父类的子类能够进行数据库操作,所以对现有的对象基础类(NSObject)进行扩展,形成一个NSObject+XTFMDB的新对象基础类,封装入和新模型基础类相同的功能;NSObject是Objective-C里所有类的基类,每一个自定义实体类进行数据库操作时,均会继承NSObject中的数据,所以扩展NSObject,可实现继承了多个父类的子类在不继承XTDBModel的场景下,也能通过一个对象使用数据库操作。这使得数据库操作更加的智能、快速和流畅,也扩大了数据库适用范围。
扩展所述新模型基础类,用于将结构化查询语言(SQL)的语句自动化、格式化或者模块化,以便所述新模型基础类和扩展后的所述对象基础类的SQL的语句调用。
现有的FMDB框架在使用时,必须依靠SQL语句的输入,这对于不熟悉数据库的人而言使用起来比较复杂,另外人工记忆和输入的方式也比较繁琐且效率低下,灵活度不够,对XTDBModel进行扩展形成一个AutoSql,负责将SQL语句自动化、格式化、模块化,方便XTDBModel和NSObject+FMDB对其进行调用,实现无需人工记忆和输入SQL语句的灵活操作,提高了数据库开发效率。
实施例2
如图1所示,本实施例与之前实施例的区别在于,本实施例提供一种更加详细的数据库架构方法,所述方法还包括配置数据库,用于共享数据库对象或验证对应表是否存在。
所述配置数据库包括:在数据库启动时,调用或配置数据库名;调用或配置数据库路径;单例化数据库对象;单例化同步队列。这些都是为数据的初始化运行做准备,方便数据库操作时更精确、更有针对性,使数据库支持多线程安全和事务回滚。
所述新模型基础类(XTDBModel)中详细的包括如下定义:属性列表解析;字段约束;数据库动作;
所述扩展对象基础类中包括如下定义:主键自增;属性列表解析;字段约束;数据库动作。
具体地:新模型基础类的建立和对象基础类的扩展实现方式基本相同,区别在于主键(PKID),PKID是FMDB模型基础类(DBModel)中自带的属性,继承DBModel的子类可以继承本实施例中的XTDBModel,故XTDBModel无需定义PKID,而本实施例中NSObject+XTFMDB是为没有继承DBModel的子类服务的,故而没有PKID属性,需要自行定义主键自增,添加PKID属性作为数字主键,确保唯一性。其中,NSObject+XTFMDB利用了Objective-C的category特性完全解耦,可完美的解决多继承的场景,同时也完美实现软件开发高内聚低耦合的精髓。
所述属性列表解析包括采用扩充C的面向对象编程语言(Objective-C)底层的运行时(Runtime)特性,Runtime***可以动态创建类和对象,本实施例中利用Runtime作类的解析,用于将映射类属性列表和属性类型列表一一对应转换为SQLite对应的格式和属性,可直接调用数据库操作的方法,使得无需像现有FMDB框架下,对每一张表进行维护,这大大缩短了数据库访问的时间,提高了效率。
所述字段约束包括设定忽略字段和利用SQL关键字针对一个字段进行约束;例如:SQL关键字约束实现如下:
(NSDictionary*)modelPropertiesSqliteKeywords
{
return@{
@"title":@"UNIQUE",...//加入想要的关键字,以空格隔开即可
};
}
设定忽略字段可通过在代码中列出和指定不想要参与建表的字段,例如一些和视图有关的属性等,使得数据库在操作时自动识别这些需要忽略操作的字段;如:(NSArray*)ignoreProperties
{
return@[
@"abcabc",...//abcabc为相应需要忽略的字段
];
}
所述数据库动作定义包括:抽象SQL语句;封装所述抽象SQL语句结果。数据库动作执行的前提是需要相对应的数据函数定义,而定义的方式如下:首先,将业务使用的SQL语句完全分离,抽象出增删改查的各种可能遇到的情况,例如批量***、更新;按条件查询等,抽象时,分离出操作对象和查询条件作为参数和SQL语句结合封装成可用的数据库动作集合,以备调用。
目前本实施例中,抽象出的操作方法为11种,分别是***单个(insert)、批量***(insertList)、更新单个(update)、批量更新(updateList)、查询表中所有数据(selectAll)、按条件查询(selectWhere)、按条件查询单个(findFirstWhere)、按条件查询是否包含(hasModelWhere)、删除当前Model(deleteModel)、按条件删除某Model(deleteModelWhere)、删除本表(dropTable),均各自有相关的代码实现,基本适用于各种对数据表的操作。
本实施例是对FMDB框架的进一步优化,集成了它原有的优良特性,支持多线程安全,支持操作失败事务回滚,能有效防止数据的混乱;并增加了新的功能优化,支持低耦合,多场景的模型快速建表,支持脱离SQL语句输入的操作,不与原有的FMDB框架产生冲突,封装了多种操作方法,满足多种数据库表的操作需求,实现简单,操作方便、复用性高,可提高开发效率。
实施例3
如图2所示,一种数据库框架,所述框架包括:
配置层100,用于配置数据库相关,以共享数据库对象或验证对应表是否存在;
模型层200,用于建立相关基础类,满足单继承和多继承场景下的数据库使用,使得通过对象进行数据库操作。
所述模型层200包括:
新模型基础类模块210,用于建立新模型基础类执行属性列表解析;字段约束;数据库动作;
对象基础类扩展模块220,用于扩展对象基础类执行主键自增;属性列表解析;字段约束;数据库动作。
所述配置层100包括:
调用配置模块110,用于在数据库启动时,执行数据库名调用或配置,数据库路径调用或配置;
单例化模块120,用于将数据库对象、同步队列单例化。
所述模型层200还包括新模型基础类扩展模块230,用于扩展所述新模型基础类,将SQL的语句自动化、格式化或者模块化,以便所述新模型基础类和扩展后的所述对象基础类的SQL的语句调用。
需要说明的是,本实施例提供的框架是依据上述实施例中指出的数据库架构方法来实现的,为上述实施例中指出的数据库架构方法提供物理支持和服务。
本实施例的数据库框架访问操作实现过程如下:鉴于有些部分与现有的FMDB框架下的操作相同,故此处不再赘述,首先,在配置层100会在数据库应用APP启动时调用配置函数,即执行数据库名调用或配置,数据库路径调用或配置,将数据库对象、同步队列单例化的动作,以便共享数据库对象或验证对应表是否存在;配置层100配置完成后,需要我们自定义一个类Model,并且在其中定义一些属性,如年龄性别等等,然后让此类继承于新模型基础类模块210中的新模型基础类,新模型基础类会在内部解析这个Model,并且生成对应的一个数据库元组类型,并将对应字段的类型一一转换;数据库访问过程中,我们还可以对Model设定约束,例如有哪些字段不参与建表,或者指定姓名的唯一性,指定对应的操作方法等;然后,调用新模型基础类扩展模块230中封装的SQL语句,操作数据库动作,目前为11种,增删改查,单个批量等,详细参见实施例2,无须再手写SQL语句,就能得到我们需要的结果,操作灵活且轻便。
本文中所描述的具体实施例仅仅是对本发明精神作举例说明。本发明所属技术领域的技术人员可以对所描述的具体实施例做各种各样的修改或补充或采用类似的方式替代,但并不会偏离本发明的精神或者超越所附权利要求书所定义的范围。