把FMDB封裝到自己滿意的程度

前言:
選一個數據庫作為主力,realm,coredata,sqlite這三個我糾結之后還是選了sqlite. 有很多原因,不展開了. 但fmdb用起來有一些蛋疼.很多重復代碼. 有必要做個工具提高效率了.

在決定自己封裝fmdb之前.已經有人做了相關的東西.不過有些地方還是不能滿足我的需求. 比如我想特指某個字符串做主鍵. 于是自己動手實現了.但在實現過程中發現了疑慮. model制表肯定牽涉到映射相關的問題. 想來想去. 要做個通用的數據庫工具. 還是做成能夠默認自增數字主鍵最合適. 那么, 要解決我的需求. 其實還可以用sql關鍵字修飾某個字段 .

XTFMDB

特性

  1. Model直接存儲.獲取. 無需再轉換
  2. 增刪改查. 脫離sql語句
  3. 主鍵自增. 插入不需設主鍵. pkid
  4. Model滿足. 無容器, 無嵌套. model的第一個屬性必須是數字主鍵.且命名中須包含'pkid'.默認為pkid
  5. 任何操作. 線程安全
  6. 批量操作支持實務. 支持操作失敗事務回滾. 且線程安全
  7. 支持 每個字段自定義設置關鍵字. 已經集成默認關鍵字, 以下情況無需再寫( NOT NULL, DEFAULT''字符類型默認值,DEFAULT'0'數字類型默認值 )
  8. 可指定哪些字段不參與建表.

使用方法

導入 XTFMDB.h

初始化 在app啟動時調用配置函數

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
// 在這初始化數據庫
[[XTFMDBbase sharedInstance] configureDB:@"akateason"] ;

return YES;
}


使用CRUD

先創建一個自定義模型類Model1

支持兩種建模方式

方式1) XTDBModel的子類, 可以直接實現對數據庫操作增刪改查等.并且無需設置主鍵pkid

@interface Model1 : XTDBModel
// 無需設置主鍵 默認 pkid
@property (nonatomic)       int             age         ;
@property (nonatomic)       float           floatVal    ;
@property (nonatomic)       long long       tick        ;
@property (nonatomic,copy)  NSString        *title      ;
@property (nonatomic,copy)  NSString        *abcabc     ; // 不想在表里出現這個 !!
@end

方式2) 任意創建一個類, 可以直接實現對數據庫操作增刪改查等.但需要手動設置主鍵pkid

@interface Model1 : NSObject
@property (nonatomic)       int             pkid        ; // primary key
@property (nonatomic)       int             age         ;
@property (nonatomic)       float           floatVal    ;
@property (nonatomic)       long long       tick        ;
@property (nonatomic,copy)  NSString        *title      ;
@property (nonatomic,copy)  NSString        *abcabc     ; // 不想在表里出現這個 !!
@end

可配置各個字段關鍵字

注意:

  1. 在.m中覆蓋基類modelPropertiesSqliteKeywords方法. 返回一個Dictionary. key為字段名. val為關鍵字, 加入想要多個關鍵字,以空格隔開即可 .
  2. 無需添加NOT NULLDEFAULT關鍵字. (已集成) .
+ (NSDictionary *)modelPropertiesSqliteKeywords
{
return @{
@"title" : @"UNIQUE" ,  // 
...           
} ;
}

配置不想參與建表的字段

在.m中覆蓋基類ignoreProperties方法. 返回Array. 列出不想參與建表的字段

+ (NSArray *)ignoreProperties
{
return @[
@"abcabc" ,
...
] ;
}
只需要導入`"XTFMDB.h"就可使用

創建表

  1. 馬上創建一張名為Model1的數據庫表
[Model1 xt_createTable] ; // [Model1 createTable] ; 當Model1是XTDBModel子類時,也可以用這個方法.以下方法均可以同上.

插入

  1. 插入單個
// 生成aModel對象. 直接插入
int lastRowID = [aModel xt_insert] ; // 默認返回Sqlite LastRowId
  1. 批量插入
Bool isSuccess = [Model1 xt_insertList:modelList] ;

更新

  1. 更新單個
Bool isSuccess = [aModel xt_update] ;
  1. 批量更新
Bool isSuccess = [Model1 xt_updateList:modelList] ;

查詢

  1. 查詢表中所有數據
NSArray *list = [Model1 xt_selectAll] ;
  1. 按條件查詢
NSArray *list = [Model1 xt_selectWhere:@" title = 'aaaaaa' "] ; // 直接傳入where條件即可
  1. 按條件查詢單個
Model1 *model = [Model1 xt_findFirstWhere:@"pkid == 2"] ;
  1. 按條件查詢是否包含
BOOL isContained = [Model1 xt_hasModelWhere:@"pkid == 1"] ;

刪除

  1. 刪除當前Model
BOOL isDel = [aModel xt_deleteModel] ;
  1. 按條件刪除某Model
BOOL isDel = [Model1 xt_deleteModelWhere:@" title == 'aaa' "] ;
  1. 刪除本表
BOOL isDel = [Model1 xt_dropTable] ;

源碼在此
你的star是我的動力
有任何疑問或建議. 歡迎在github或博客里issue我. 輕噴.


接前言提問:
那個問題用unique關鍵字解決了.


此外我還有一些奇怪的想法留在文末.
這個工具幾乎可以處理客戶端通常遇到的關系型表的問題.
倘若不換數據庫. 是否能夠去實現一些類似nosql非關系型的存儲.
應該是可以的.
我會在下一篇文章給出我的答案 以及這個想法的由來和適用場景 .

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 230,825評論 6 546
  • 序言:濱河連續發生了三起死亡事件,死亡現場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機,發現死者居然都...
    沈念sama閱讀 99,814評論 3 429
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事。” “怎么了?”我有些...
    開封第一講書人閱讀 178,980評論 0 384
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經常有香客問我,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 64,064評論 1 319
  • 正文 為了忘掉前任,我火速辦了婚禮,結果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當我...
    茶點故事閱讀 72,779評論 6 414
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發上,一...
    開封第一講書人閱讀 56,109評論 1 330
  • 那天,我揣著相機與錄音,去河邊找鬼。 笑死,一個胖子當著我的面吹牛,可吹牛的內容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 44,099評論 3 450
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 43,287評論 0 291
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當地人在樹林里發現了一具尸體,經...
    沈念sama閱讀 49,799評論 1 338
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 41,515評論 3 361
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發現自己被綠了。 大學時的朋友給我發了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 43,750評論 1 375
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 39,221評論 5 365
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響,放射性物質發生泄漏。R本人自食惡果不足惜,卻給世界環境...
    茶點故事閱讀 44,933評論 3 351
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 35,327評論 0 28
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 36,667評論 1 296
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 52,492評論 3 400
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 48,703評論 2 380

推薦閱讀更多精彩內容