MySQLKit 是一个 SQLKit 驱动,用于 MySQL 客户端。它支持构建和序列化 MySQL 方言的 SQL 查询。MySQLKit 使用 MySQLNIO 来异步地连接和与数据库服务器通信。AsyncKit 用于提供连接池。
使用 SPM 字符串可以轻松地将依赖项包含在您的 Package.swift
文件中。
.package(url: "https://github.com/vapor/mysql-kit.git", from: "4.0.0")
MySQLKit 支持以下平台
数据库连接选项和凭据使用 MySQLConfiguration
结构体指定。
import MySQLKit
let configuration = MySQLConfiguration(
hostname: "localhost",
port: 3306,
username: "vapor_username",
password: "vapor_password",
database: "vapor_database"
)
也支持基于 URL 字符串的配置。
guard let configuration = MySQLConfiguration(url: "mysql://...") else {
...
}
要通过 unix 域套接字连接,请使用 unixDomainSocketPath
代替 hostname
和 port
。
let configuration = MySQLConfiguration(
unixDomainSocketPath: "/path/to/socket",
username: "vapor_username",
password: "vapor_password",
database: "vapor_database"
)
一旦您有了 MySQLConfiguration
,您就可以使用它来创建连接源和连接池。
let eventLoopGroup: EventLoopGroup = ...
defer { try! eventLoopGroup.syncShutdown() }
let pools = EventLoopGroupConnectionPool(
source: MySQLConnectionSource(configuration: configuration),
on: eventLoopGroup
)
defer { pools.shutdown() }
首先使用配置结构体创建一个 MySQLConnectionSource
。此类型负责根据需要创建到您的数据库服务器的新连接。
接下来,使用连接源创建一个 EventLoopGroupConnectionPool
。您还需要传递一个 EventLoopGroup
。有关创建 EventLoopGroup
的更多信息,请访问 SwiftNIO 的 文档。请确保在连接池被销毁之前关闭它。
EventLoopGroupConnectionPool
是每个事件循环的池集合。当直接使用 EventLoopGroupConnectionPool
时,将根据需要选择随机事件循环。
pools.withConnection { conn
print(conn) // MySQLConnection on randomly chosen event loop
}
要获取特定事件循环的池,请使用 pool(for:)
。这将返回一个 EventLoopConnectionPool
。
let eventLoop: EventLoop = ...
let pool = pools.pool(for: eventLoop)
pool.withConnection { conn
print(conn) // MySQLConnection on eventLoop
}
EventLoopGroupConnectionPool
和 EventLoopConnectionPool
都可以用于创建 MySQLDatabase
的实例。
let mysql = pool.database(logger: ...) // MySQLDatabase
let rows = try mysql.simpleQuery("SELECT @@version;").wait()
访问 MySQLNIO 的文档 以获取有关使用 MySQLDatabase
的更多信息。
一个 MySQLDatabase
可以用于创建 SQLDatabase
的实例。
let sql = mysql.sql() // SQLDatabase
let planets = try sql.select().column("*").from("planets").all().wait()
访问 SQLKit 的文档 以获取有关使用 SQLDatabase
的更多信息。