Fluent是第一個(gè)Swift ORM,它與各種各樣的數(shù)據(jù)庫非常相似仗哨。 它提供了一種使用簡單形庭、表達(dá)精美的語法來與數(shù)據(jù)庫進(jìn)行交互。
Driver是引擎中強(qiáng)大的Fluent厌漂,F(xiàn)luent具有默認(rèn)的存儲驅(qū)動(dòng)萨醒,另外有許多數(shù)據(jù)庫驅(qū)動(dòng)的providers
可以使用,比如:MySQL苇倡、SQLite富纸、Mongo、PostgreSQL等等雏节。
上圖以MySQL為例胜嗓,顯示了
Provider
和Driver
之間的關(guān)系,這種區(qū)別可以讓Fluent
獨(dú)立于Vapor
使用钩乍。如果你不想通過Vapor使用Fluent辞州,你可以將
Driver
添加到你的package中,如果你要使用Vapor寥粹,你可以導(dǎo)入Provider
变过。(也就是說要么你往自己的開發(fā)包中添加驅(qū)動(dòng)程序,要么就引入對應(yīng)的Provider
涝涤,使用Vapor進(jìn)行開發(fā)媚狰。)GitHub搜索:
目前不是每個(gè)Driver都有Provider,也不是每個(gè)Driver的Provider都滿足最新版本的Vapor阔拳。這需要偉大的奉獻(xiàn)和努力崭孤。
Creating a Driver
Fluent是一種很強(qiáng)大,支持多種數(shù)據(jù)庫模型持久化的軟件包,它最開始是為SQL和NoSQL數(shù)據(jù)庫設(shè)計(jì)的辨宠。
遵守Fluent.Driver
協(xié)議的任何數(shù)據(jù)庫都可以為Fluent和Vapor提供數(shù)據(jù)模型遗锣。
Driver
協(xié)議:
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對每次查詢都會調(diào)用此方法,可以驅(qū)動(dòng)Qeury中所有可以正確解析的屬性赋兵,然后通過
Node
顯示返回所需的行笔咽、文檔或者其他數(shù)據(jù)。 - <b>schema:</b>在數(shù)據(jù)庫準(zhǔn)備查詢之前霹期,將調(diào)用它的
schema
方法叶组。 對于某些NoSQL數(shù)據(jù)庫(如MongoDB),可以忽略此方法经伙。 對于SQL扶叉,就要通過Schema
調(diào)用CREATE
和其他類似命令(sql語句)。 - <b>raw:</b>這是一個(gè)可選方法帕膜,可以被接收字符串查詢的任何Fluent驅(qū)動(dòng)程序調(diào)用枣氧。 如果你的數(shù)據(jù)庫不接受此類查詢,則可能會拋出異常垮刹。