SQLiteModel 0.3.3

SQLiteModel 0.3.3

测试已测试
语言语言 SwiftSwift
许可证 MIT
发布最后发布2016年5月
SPM支持SPM

Jeff Hurray维护。



适用于SQLite3的、由SQLite.swift包装的开发友好型的对象关系模型

struct Person: SQLiteModel {

    // Required by SQLiteModel protocol
    var localID: SQLiteModelID = -1

    static let Name = Expression<String>("name")
    static let Age = Expression<Int>("age")
    static let BFF = Relationship<Person?>("best_friend")

    // Required by SQLiteModel protocol
    static func buildTable(tableBuilder: TableBuilder) {
        tableBuilder.column(Name)
        tableBuilder.column(Age, defaultValue: 0)
        tableBuilder.relationship(BFF, mappedFrom: self)
    }
}
let jack = try Person.new([
       Person.Age <- 10,
       Person.Name <- "Jack"
   ])

let jill = try Person.new([
   Person.Age <- 12,
   Person.Name <- "Jill"
   ])

// Set age
// same as jack.set(Person.Age, 11)
jack <| Person.Age |> 11
// Get age
// same as jack.get(Person.Age)
let age = jack => Person.Age

// Set Best Friend
// same as jack.set(Person.BFF, jill)
jack <| Person.BFF |> jill

let people = try Person.fetchAll()

功能

  • 易于设置👌
  • 数据库功能💾(创建/删除表,插入,更新,删除,检索)
  • 关系👫(一对一,多对一,多对多)
  • 模式修改 🛠
  • 同步和异步执行🏁🚀
  • 线程安全👮☢️
  • 易于阅读和编写的语法🙌
  • 详细的错误处理和日志记录❗️🖨
  • 详细文档 🤓🗂
  • 经过良好测试📉📊📈
  • 支持iOS,OSX,tvOS📱💻📺
  • 示例项目🔍
  • 纯Swift💞😻

安装

SQLiteModel需要Swift 2(和Xcode 7)或更高版本。

手动

要将SQLite.swift作为Xcode子项目安装

  1. SQLite.xcodeproj文件拖到您的项目中。(首先克隆子模块,或者从此处下载项目。)

  2. 在您的目标“通用”选项卡中,点击“链接框架和库”下的“+”按钮。

  3. 选择针对您平台正确的“SQLite.framework”。

  4. 添加.

文档

此仓库的wiki包含大量文档。

为什么选择SQLiteModel

ORM

市面上有很多优秀的存储解决方案,其中RealmCoreData最为流行。这些解决方案的最大问题是它们强制您的模型为引用类型(类)而不是值类型(结构体)。

苹果的文档中列出了一些条件,如果条件为真,结构体可能比类是一个更好的选择。这里是具体的说明。以下条件尤其相关。

结构体的主要用途是封装一些相对简单的数据值。

听起来数据库行符合这个描述。理想情况下,如果试图模拟数据库行,最好使用结构体,SQLiteModel 支持使用结构体。

话虽如此,结构体并不总是最佳选择。SQLiteModel 也支持使用类,但到目前为止,它们必须是 final 的。

SQLite 包装器

还存在许多对 SQLite 进行包装但并非对象关系模型的库。SQLite.swiftFMDB 是两个提供此类功能的优秀库。这些库功能非常强大且灵活,但它们需要一些时间才能正确设置,因为它们需要大量的样板代码。

使用 SQLiteModel,样板代码已经编写好了。显然,你牺牲了一些灵活性以换取使用便利,但对我来说,对于大多数数据存储需求来说,这是可以接受的。

TL;DR

  • SQLiteModel 支持结构体,对于模拟数据库表和行来说,结构体可能比类更优。
  • SQLiteModel 以最少的样板代码提供了丰富的功能。

示例项目

这里有几个如何使用 SQLiteModel 的示例。

游乐场

此存储库包含一个可以用于探索 SQLiteModel 语法和功能的游乐场。请确保打开 SQLiteModel.xcodeproject,因为这个游乐场引入了 SQLiteModel 框架,并确保你正在使用 SQLiteModel-iOS 规划。

示例应用程序

可以在这里找到 iOSTVOSOSX 的示例应用程序存储库。链接。这些项目都使用 CocoaPods,因此请确保打开 .xcworkspace 以运行它们。

提供的 iOS 示例是最好的、最全面的示例,如何使用 SQLiteModel。的应用程序是一个博客平台,允许用户创建、删除和保存博客文章。用户还可以在博客中使用关系添加图片,并在另一个选项卡中查看所有图片。

向前推进

  • [x] 已删除:Carthage 支持
  • [x] 已删除:复杂关系查询
  • [x] 已删除:读取现有数据库
  • [ ] 更多标量查询
  • [ ] 更多表变更选项
  • [ ] 改善 db 和值类型之间的数据管道
  • [ ] 提高关系性能

联系方式

请随时通过电子邮件与我联系 [email protected]。我很乐意听听您的想法,或者看看这个是如何被使用的例子。

您也可以在推特上 @JeffHurray 寻找我的联系方式。

贡献

如果您想添加功能,请打开一个问题报告和/或创建一个拉取请求。

鸣谢

非常感谢 Stephen Celis 编写 SQLite.swift,我认为它是今天存在的最好的 Swift 开源库之一。

许可证

SQLiteModel 在 MIT 许可下可用。更多信息请参阅 LICENSE 文件。