午夜精品人妻久久久-成年美女很黄的网站-在线看片免费人成视久网app-国产精品美女无遮挡一区二区-91精品国产综合久久久久-国产的免费视频又猛又爽又刺激-在线看片免费人成视久网app-久久香蕉国产精品视频-av一区二区三区高清

從0開始弄一個(gè)面向OC數(shù)據(jù)庫(kù)–終結(jié)篇

從0開始弄一個(gè)面向OC數(shù)據(jù)庫(kù)–終結(jié)篇
前言
我們從0開始封了一個(gè)面向OC模型的數(shù)據(jù)庫(kù)就要結(jié)束了,開發(fā)工作其實(shí)在上一篇就做完了,之后做了一些小的優(yōu)化以及代碼的調(diào)整來(lái)發(fā)布這篇文章,先看一下我們最終形態(tài) 。
我們支持的類型有:
所有的基本數(shù)據(jù)類型(int,float),NSNumber,NSArray,NSMutableArray,NSDictionary , NSMutableDictionary,UIImage,NSURL,UIColor,NSSet,NSRange,NSAttributedString,NSData,自定義模型,以及數(shù)組、字典、模型相互嵌套復(fù)制代碼
這篇文章,將全方位介紹我們數(shù)據(jù)庫(kù)–CWDB以及如何使用!
架構(gòu)
類名作用.h需要遵守以及實(shí)現(xiàn)的協(xié)議方法(用戶).h、.m本庫(kù)操作數(shù)據(jù)庫(kù)的所有API(用戶).h、.m直接調(diào)用底層API的類.h、.m處理模型的工具類.h、.處理數(shù)據(jù)庫(kù)表的工具類
在使用前 , 我們先模擬一個(gè)對(duì)應(yīng)的使用場(chǎng)景,要解決什么問(wèn)題,這個(gè)場(chǎng)景也是我們demo中的演示代碼所展現(xiàn)的(你可以打開demo在目錄下找到它) 。
我們希望保存幾所學(xué)校的資料到數(shù)據(jù)庫(kù) 。
以上的層級(jí)關(guān)系有模型嵌套數(shù)組嵌套模型的場(chǎng)景、模型嵌套模型再嵌套數(shù)據(jù)再嵌套模型的場(chǎng)景也就模型直接嵌套模型的場(chǎng)景 。
然后我們使用工廠方法來(lái)快速構(gòu)造各個(gè)模型jsp用什么數(shù)據(jù)庫(kù)好,用來(lái)搭建整個(gè)學(xué)校
學(xué)校的結(jié)構(gòu)設(shè)定好了之后~我們用代碼構(gòu)造一所所這樣的夢(mèng)想學(xué)院 。。然后我們要使用我們的數(shù)據(jù)庫(kù)將學(xué)校的資料保存起來(lái) 。
How to use CWDB?
1、將CWDB拖進(jìn)你的項(xiàng)目或者使用(pod ‘CWDB’, ‘~> 1.5.0’),給項(xiàng)目添加.0.tbd庫(kù),需要存儲(chǔ)進(jìn)數(shù)據(jù)庫(kù)的模型導(dǎo)入.h頭文件,然后遵守協(xié)議,實(shí)現(xiàn)下面這個(gè)方法返回對(duì)應(yīng)的主鍵信息:
+ (NSString *)primaryKey { // 返回schoolId為主鍵 return @"schoolId";}復(fù)制代碼
2、為所欲為之為所欲為操作數(shù)據(jù)庫(kù)
// 使用工廠方法創(chuàng)建的shool模型CWSchool *school = [self cwSchoolWithID:9999 name:@"夢(mèng)想學(xué)院"]; // 調(diào)用保存或者更新方法,uid為userId,對(duì)應(yīng)數(shù)據(jù)庫(kù)的名字,targetId為目標(biāo)ID,與數(shù)據(jù)庫(kù)表名相關(guān),可以傳nil 。BOOL result = [CWSqliteModelTool insertOrUpdateModel:school uid:nil targetId:nil];復(fù)制代碼
為什么要設(shè)置兩個(gè)多余的參數(shù)uid與?為了迎合下面一些場(chǎng)景,如果你不,傳nil即可
關(guān)于數(shù)據(jù)庫(kù)升級(jí)以及數(shù)據(jù)庫(kù)遷移,假設(shè)我存在數(shù)據(jù)庫(kù)的數(shù)據(jù)為聊天記錄 , 里面有10個(gè)成員變量,有一天,業(yè)務(wù)的提升,我要在里面多加一個(gè)成員變量,如新增一個(gè)成員變量用來(lái)標(biāo)記是否是撤回的消息,這個(gè)時(shí)候由于數(shù)據(jù)庫(kù)的表結(jié)構(gòu)固定死了沒(méi)這個(gè)字段,插入數(shù)據(jù)肯定是失敗的,為了解決這個(gè)問(wèn)題,我們將要進(jìn)行數(shù)據(jù)庫(kù)升級(jí)jsp用什么數(shù)據(jù)庫(kù)好,并且要將之前的數(shù)據(jù)都保留下來(lái) , 這個(gè)要怎么做呢?這里壓根不需要你思考這個(gè)問(wèn)題,我作為一個(gè)負(fù)責(zé)任的男人 , 我很負(fù)責(zé)任的告訴你,假如你的模型新增加了1個(gè)2個(gè)10個(gè)成員變量,你只管加 , 加了之后只管調(diào)用上面的方法存,數(shù)據(jù)的升級(jí)以及遷移我們默認(rèn)會(huì)幫你完成?。。?
// result內(nèi)的元素為CWSchool的模型NSArray *result = [CWSqliteModelTool queryAllModels:[CWSchool class] uid:nil targetId:nil];復(fù)制代碼
查詢方法返回值是一個(gè)數(shù)組,這個(gè)數(shù)組里面的數(shù)據(jù)全部為的模型 , 因?yàn)槲覀兂兄Z過(guò),保存的時(shí)候是模型A,查詢出來(lái)的一定也是模型A 。
CWSchool *school = [self cwSchoolWithID:9999 name:@"夢(mèng)想學(xué)院"];// 刪除school數(shù)據(jù)BOOL result = [CWSqliteModelTool deleteModel:school uid:nil targetId:nil];復(fù)制代碼
這個(gè)方法,會(huì)根據(jù)傳進(jìn)來(lái)的模型的主鍵值去找到數(shù)據(jù)表里面的數(shù)據(jù)刪除 。
我們的功能基本都在這了,除了還有一些條件查詢與刪除沒(méi)寫在這里 。有人會(huì)問(wèn),數(shù)據(jù)庫(kù)不是增刪查改4個(gè)嗎?怎么你只有3個(gè),我們也實(shí)現(xiàn)了改的操作,只是我們把這個(gè)操作和增合并成了一個(gè)方法,也就是這里的第一個(gè)方法,我們會(huì)根據(jù)主鍵來(lái)判斷數(shù)據(jù)庫(kù)內(nèi)是否存在對(duì)應(yīng)的數(shù)據(jù),如果存在,我們則進(jìn)行更新操作,不存在則插入數(shù)據(jù) 。
我們的演示代碼對(duì)數(shù)據(jù)庫(kù)操作提供了一個(gè)可視化的操作界面,大概是這樣子
當(dāng)然插入的數(shù)據(jù)與查詢的數(shù)據(jù)是否對(duì)應(yīng)從界面上是無(wú)法看出來(lái)的 , 你可以像我這樣打一個(gè)斷點(diǎn)查看:
關(guān)于CWDB的更多用法,請(qǐng)轉(zhuǎn)到:CWDB查看或者看代碼提供的API 。。如果有不能滿足你需求的場(chǎng)景或者有任何疑問(wèn),歡迎留言或者提issue,最終看在全校女同學(xué)的面子上 give me one star ?。?
如果你也想封裝一個(gè)有很多女同學(xué)的數(shù)據(jù)庫(kù),但是沒(méi)有資料學(xué)的話 , 可以前往我之前文章的傳送門,每個(gè)功能的實(shí)現(xiàn),我們都提供了非常詳細(xì)的講解:
從0開始弄一個(gè)面向OC數(shù)據(jù)庫(kù)(一)
從0開始弄一個(gè)面向OC數(shù)據(jù)庫(kù)(二)
從0開始弄一個(gè)面向OC數(shù)據(jù)庫(kù)(三)
從0開始弄一個(gè)面向OC數(shù)據(jù)庫(kù)(四)
從0開始弄一個(gè)面向OC數(shù)據(jù)庫(kù)(五)
【從0開始弄一個(gè)面向OC數(shù)據(jù)庫(kù)–終結(jié)篇】本文到此結(jié)束,希望對(duì)大家有所幫助 。