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
好的,所以保存了,但是数据在哪里?