Server Side Swift入门:1.2

StORM简介

欢迎来到我的“ Server Side Swift入门”系列的第三部分。 在整个系列文章中,我将解释如何使用Perfect工具箱使用Server Side Siwft的各个不同方面进行入门和运行的基础知识。

今天,我将介绍Swift ORM“ StORM”,它旨在与Perfect及其数据库连接器一起使用。 我将介绍如何设置一个与StORM一起使用的类,以及读取,写入和删除数据的基础知识。

首先,让我们看看什么是ORM。

ORM代表对象关系映射,它是一种方法,旨在提供快速代码中的对象与数据库条目之间的链接。

这意味着您可以在代码中创建和填充对象,然后调用“保存”命令,它将保存记录-如果记录已经存在,则对其进行更新,否则将创建一个新记录。

相反,您还可以指示ORM从数据库中获取特定行,它将填充对象,或者如果多行符合您的查找条件,则返回有序对象数组。

最后,ORM将帮助您删除条目。

所有这些都无需创建所有连接,处理所有数据库打开/关闭操作以及处理数据库操作通常需要的所有其他详细代码。 这些都覆盖在ORM中,因此您不必这样做。

但是,ORM的真正魅力在于另外两个概念:

  • 如果您使用的是SQL数据库,则无需了解SQL即可完成所有这些操作。
  • 其次,从一个数据库到另一个数据库的基本操作和语法应该完全相同。 “获取”操作与您使用MySQL一样,与MongoDB相同。 与“保存”或“删除”相同。

今天,我们将使用SQLite StORM来研究Perfect中的ORM操作。 如前所述,所有这些操作对于其他StORM变体几乎都是相同的:MySQL,Postgres,CouchDB和MongoDB。

首先,让我们在Perfect Assistant中创建一个新项目。 我们将创建一个“空可执行项目”,并将其命名为“ StORMDemo”

现在,它现在完全没有依赖项-让我们添加SQLiteStorm依赖项…,然后按“保存更改”。

立即它将开始获取所有需要的文件,并将重新创建Xcode项目。 完成后,单击“打开:Xcode项目”按钮。

打开main.swift,默认为print hello world语句。 在运行之前,我们需要选择可执行的目标方案,而在执行该方案时,我们将设置项目工作目录,稍后将需要它。

运行此命令,我们看到“ Hello,World!”已在控制台视图中打印出来,然后该程序存在。 与一直运行直到关闭的Web服务器可执行文件不同,此可执行文件是简单的运行和退出。

这个“ Hello,World!”不是我们想要的—第一步是定义数据库配置。 对于SQLite,我们只需要设置一件事-数据库名称和位置。 对于其他用户,您必须设置IP地址,端口,用户名和密码等参数,但是使用SQLite作为教学工具要容易得多。

首先,我们需要添加到main.swift文件中:

 导入SQLiteStORM 
进口StORM
SQLiteConnector.db =“ ./stormdemo”

这告诉ORM该文件的位置和名称在我们工作目录的表面,因此将其称为“ stormdemo”

我们需要做的下一件事是添加一个类,为其提供一些属性,并将其连接起来以供ORM使用。

为我们的课程Monster.swift创建一个新文件

在此文件中,我们还需要导入SQLiteStORM,因为我们将把它用作超类。 让我们开始我们的课并给它一些属性:

 导入SQLiteStORM 
 类Monster:SQLiteStORM { 
var id:Int = 0
var名称:String =“”
var腿:Int = 4
var危险等级:字符串=“无”
}

请注意,我已经为属性指定了类型和初始默认值。 这仅仅是为了使我们不必创建初始化程序,而可以直接使用它。

我们还需要添加几个功能。 第一个,“ to”描述如何解释从数据库返回的值。 乍一看这似乎很多余,但稍后我将向您展示原因。

接下来是一个简单的迭代器,它将帮助ORM从多个结果中构成我们的Monster对象的数组。

 覆盖func to(_ this:StORMRow){ 
id = this.data [“ id”]如? Int ?? 0
名称= this.data [“名称”]为? 字符串?? ”
腿= this.data [“腿”]为? Int ?? 0
危险等级= this.data [“危险等级”]为? 字符串?? “没有”
}
  func rows()-> [Monster] { 
var行= [Monster]()
对于0中的i。.<self.results.rows.count {
让行= Monster()
row.to(self.results.rows [i])
rows.append(row)
}
返回行
}

返回main.swift以开始操作。

  var start = Monster() 
尝试? start.setup()

我们正在创建该类的实例,以便我们可以运行“ setup”,这将检查以确保表“ monster”已存在于数据库中,如果没有,则会创建该表。 在这种情况下,我们将忽略失败的可能性,因为为此失败不一定是错误的。

接下来,我们将创建一个新实例,为属性提供一些内容,然后保存它。 保存必须在执行/捕获中,这样我们才能很好地处理任何错误。

  var something1 = Monster() 
something1.name =“兰德尔”
something1.legs = 4
something1.dangerlevel =“中等”
做{
试试thing1.save()
打印(“ Randall已保存”)
} {
打印(错误)
}

让我们运行它,看看会发生什么。

  [INFO]运行设置:怪物 
兰德尔被保存了
程序以退出代码结束:0

好的,所以保存了,但是数据在哪里?