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驅動程序調用。 如果你的數據庫不接受此類查詢,則可能會拋出異常。