Realm数据库
1.DML 增删改
2.DQL 查询
3.DDL 表格
返回结果是列表 列表里是字典
单元测试数据库
每个单元的测试 函数测试 测试用例
单元测试一般针对数据层和网络层
- (void)setUp 用例之前
- (void)tearDown 测试用例之后
- (void)testPerformanceExample 测试性能
代码覆盖率 Code Coverage 在xcode的scheme中设置
显示测试的代码函数覆盖率数量 既包括if里面没有执行的代码
可以测试代码的覆盖率
自定义test开头的单元测试文件
awesome-mac(收集好用的 Mac 应用程序、软件以及工具)
主键必须有 唯一标识
1.对sql语句的封装
2.对面向对象的封装
通过plist文件创建表 通过runtime设置 在字典转模型是进行忽略key设置
动态更新表
对应sqlite有一个不可见的数据库 sqlite_master
面向对象数据库
XMGSqliteTool 封装sql语句
1.处理sql语句 包括创建增删改查等
+ (BOOL)deal:(NSString *)sql uid:(NSString *)uid {
// 1. 打开数据库
if (![self openDB:uid]) {
NSLog(@"打开失败");
return NO;
}
// 2. 执行语句
BOOL result = sqlite3_exec(ppDb, sql.UTF8String, nil, nil, nil) == SQLITE_OK;
// 3. 关闭数据库
[self closeDB];
return result;
}
2.处理多条语句 sqls 并用事务包装
+ (BOOL)dealSqls:(NSArray <NSString *>*)sqls uid:(NSString *)uid;
3.查询语句 返回查询的字典数组
+ (NSMutableArray <NSMutableDictionary *>*)querySql:(NSString *)sql uid:(NSString *)uid;
XMGSqliteModelTool 模型到sql操作的工具
- 根据一个模型类, 创建数据库表
+ (BOOL)createTable:(Class)cls uid:(NSString *)uid;
2.判断模型是否要更新 根据与本地的模型数组名称进行对比
+ (BOOL)isTableRequiredUpdate:(Class)cls uid:(NSString *)uid;
3.更新表格 通过创建新的表格进行数据迁移更新并修改表名
+ (BOOL)updateTable:(Class)cls uid:(NSString *)uid;
4.保存模型到表格 判断模型与本地表格数量进行判断更新或创建
+ (BOOL)saveOrUpdateModel:(id)model uid:(NSString *)uid;
XMGModelProtocol 模型的协议
1.主键 必须实现
@required
/**
操作模型必须实现的方法, 通过这个方法获取主键信息
@return 主键字符串
*/
+ (NSString *)primaryKey;
2.模型中忽略的字段数组
+ (NSArray *)ignoreColumnNames;
3.字段名映射 新字段-> 旧字段的映射表格
+ (NSDictionary *)newNameToOldNameDic;
Model 遵守XMGModelProtocol 协议
XMGTableTool 对表格进行操作
1.获取表格中所有排序后的字段
+ (NSArray *)tableSortedColumnNames:(Class)cls uid:(NSString *)uid;
2.判断 模型的表格是否存在 通过查询语句
+ (BOOL)isTableExists:(Class)cls uid:(NSString *)uid
XMGModelTool
1.获取表格名称
+ (NSString *)tableName:(Class)cls
2.获取临时表格名称
+ (NSString *)tmpTableName:(Class)cls
3.所有成员变量 以及成员变量对应的类型
使用runtime
+ (NSDictionary *)classIvarNameTypeDic:(Class)cls
4.所有的成员变量 以及成员变量映射到数据库里面对应的模型
通过oc和sql映射字典
+ (NSDictionary *)classIvarNameSqliteTypeDic:(Class)cls
5.字段名称和sql类型, 拼接的用户创建表格的字符串 如: name text,age integer,score real
+ (NSString *)columnNamesAndTypesStr:(Class)cls
6.排序后的所有类名对应的成员变量数组
+ (NSArray *)allTableSortedIvarNames:(Class)cls;
网友评论