Fluent是第一个Swift ORM,它与各种各样的数据库非常相似。 它提供了一种使用简单、表达精美的语法来与数据库进行交互。
Driver是引擎中强大的Fluent,Fluent具有默认的存储驱动,另外有许多数据库驱动的providers
可以使用,比如:MySQL、SQLite、Mongo、PostgreSQL等等。
上图以MySQL为例,显示了
Provider
和Driver
之间的关系,这种区别可以让Fluent
独立于Vapor
使用。如果你不想通过Vapor使用Fluent,你可以将
Driver
添加到你的package中,如果你要使用Vapor,你可以导入Provider
。(也就是说要么你往自己的开发包中添加驱动程序,要么就引入对应的Provider
,使用Vapor进行开发。)GitHub搜索:
目前不是每个Driver都有Provider,也不是每个Driver的Provider都满足最新版本的Vapor。这需要伟大的奉献和努力。
Creating a Driver
Fluent是一种很强大,支持多种数据库模型持久化的软件包,它最开始是为SQL和NoSQL数据库设计的。
遵守Fluent.Driver
协议的任何数据库都可以为Fluent和Vapor提供数据模型。
Driver
协议:
public protocol Driver {
var idKey: String { get }
func query<T: Entity>(_ query: Query<T>) throws -> Node
func schema(_ schema: Schema) throws
func raw(_ raw: String, _ values: [Node]) throws -> Node
}
- <b>idKey:</b>被用于类似
User.find()
这样的方法,在SQL中一般是id
,在MongoDB中一般是_id
。 - <b>query:</b>Fluent对每次查询都会调用此方法,可以驱动Qeury中所有可以正确解析的属性,然后通过
Node
显示返回所需的行、文档或者其他数据。 - <b>schema:</b>在数据库准备查询之前,将调用它的
schema
方法。 对于某些NoSQL数据库(如MongoDB),可以忽略此方法。 对于SQL,就要通过Schema
调用CREATE
和其他类似命令(sql语句)。 - <b>raw:</b>这是一个可选方法,可以被接收字符串查询的任何Fluent驱动程序调用。 如果你的数据库不接受此类查询,则可能会抛出异常。