MySQLKit

Documentation Team Chat MIT License Continuous Integration Swift 5.8+


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 代替 hostnameport

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
}

MySQLDatabase

EventLoopGroupConnectionPoolEventLoopConnectionPool 都可以用于创建 MySQLDatabase 的实例。

let mysql = pool.database(logger: ...) // MySQLDatabase
let rows = try mysql.simpleQuery("SELECT @@version;").wait()

访问 MySQLNIO 的文档 以获取有关使用 MySQLDatabase 的更多信息。

SQLDatabase

一个 MySQLDatabase 可以用于创建 SQLDatabase 的实例。

let sql = mysql.sql() // SQLDatabase
let planets = try sql.select().column("*").from("planets").all().wait()

访问 SQLKit 的文档 以获取有关使用 SQLDatabase 的更多信息。