1分钟搭建完数据库,你敢信吗?

数据库样板代码

在业务开发的时候,经常需要把服务器返回的数据,存入到数据库。最经典的就是记录已登录用户的数据,在冷启动的时候,先展示之前缓存的数据,之后再请求接口展示最新的数据。

即使在FMDB、SQLite.swift等三方库的帮助下,也要写大量样板代码,尤其是数据模型的属性比较多的情况(说的就是用户数据模型,10个起步)。那么如何减少样板代码呢?使用ModelAdapter库,1分钟搭建一个数据库不再是梦想!

ModelAdapter简介

ModelAdapter Github地址

ModelAdapter是基于SQLite.swift封装的SQLite ORM库,需要Swift 5.1+。减少SQLite.swift库需要的数据库定义、增删改查等样板代码,只需要简单的配置就能完成数据对象对应数据库的搭建。

ModelAdapter示例

现在开始计时,看看ModelAdapter是如何在1分钟内完成一个数据库表的搭建呢?

原始数据模型

定义如下

struct CustomModel {
    var userID: Int = 0
    var nickName: String?
    var phone: Int?
    var age: Int = 0
}

第一步:Column定义

struct CustomModel: ModelAdapterModel {
    @Field(key: "user_id", primaryKey: true)
    var userID: Int = 0
    @FieldOptional
    var nickName: String?
    @FieldOptional(unique: true)
    var phone: Int?
    @Field
    var age: Int = 0
}

每个字段只需要添加@Field@FieldOptional以及初始化参数填写,这一步花费30秒。

第二步:指定初始化器实现

struct CustomModel: ModelAdapterModel {
    init() {
        initFieldExpressions()
    }
}

因为是样板代码,这一步花费1秒(Ctrl C+V大法)。

第三步:数据库DAO定义

class CustomDAO: ModelAdapterDAO {
    typealias Entity = CustomModel
    var connection: Connection = try! Connection("\(NSSearchPathForDirectoriesInDomains(.documentDirectory, .userDomainMask, true)[0])/db.sqlite3")
    var table: Table = Table("user")

    required init() {
    }
}

这一步需要稍微配置一下,预计花费20秒。

第四步:?撒花庆祝,CustomModel对应的数据库表创建好了

前三步合计总耗时51秒,算是超额完成任务了?。如果后续使用ModelAdapter的朋友多的话,再考虑写一个Xcode插件,前面三步花费的时间甚至可以缩短至30秒内。

下面是整个示例的完整代码:

struct CustomModel: ModelAdapterModel {
    @Field(key: "user_id", primaryKey: true)
    var userID: Int = 0
    @FieldOptional
    var nickName: String?
    @FieldOptional(unique: true)
    var phone: Int?
    @Field
    var age: Int = 0

    init() {
        initFieldExpressions()
    }
}

class CustomDAO: ModelAdapterDAO {
    typealias Entity = CustomModel
    var connection: Connection = try! Connection("\(NSSearchPathForDirectoriesInDomains(.documentDirectory, .userDomainMask, true)[0])/db.sqlite3")
    var table: Table = Table("user")

    required init() {
    }
}

开始使用

通过JSON字典数据创建model。

引入了ObjectMapper库完成JSON To Model。

let jsonDict = ["user_id" : 123, "nickName" : "暴走的鑫鑫", "phone": 123456, "age": 33]
let model = CustomModel(JSON: jsonDict)!

创建dao实例并创建数据库表单

let dao = CustomDAO()
dao.createTable()

插入数据

try? dao.insert(entity: model)

删除数据

try? dao.delete(model.$userID.expression == 123)

更新数据

model.phone = 654321
try? dao.update(entity: model, model.$userID.expression == 123)

查询数据

//查询全部
let queryAll = try? dao.queryAll() 
//条件查询
let queryOne = try? dao.query(model.$userID.expression == 123)

ModelAdapter更多细节

请点击ModelAdapter Github地址进行了解。

ModelAdapter的灵感