ExposedでMySQLに接続する

最近趣味でKtorでサーバーを書いてます。
サーバーサイドでJVM言語でMySQLを扱ったことがなかったのでメモ。
今回はJetBrainsが開発しているSQL DSL Exposedを利用します。バージョンは0.11.2
個人的にはAnnotationでDDLとDML生成してくれるORMのほうが好み。

JetBrains/Exposed

Kotlin SQL Framework. Contribute to JetBrains/Exposed development by creating an account on GitHub.

Dependencies

dependencies {
    implementation "org.jetbrains.exposed:exposed:0.11.2"
    implementation "mysql:mysql-connector-java:8.0.12"
}

ExposedどうこうよりJDBCの事を知らなすぎた。
JDBC APIを使ってMySQLを利用するにはJDBC Driverも必要。サーバーで利用しているMySQLのバージョンと同バージョンのmysql-connector-javaをdependenciesに追加しておく。

Table定義

object Users : Table() {
    val id = integer("id").autoIncrement().primaryKey()
    val name = varchar("name", length = 10)
    val age = integer("age")
}

MySQLに接続

fun main() {
    Database.connect("jdbc:mysql//host/databasename",
            driver = "com.mysql.jdbc.Driver",
            user = "user",
            password = "password")
}

CREATE TABLE

fun main() {
    Database.connect("jdbc://mysql//host/databasename",
            driver = "com.mysql.jdbc.Driver",
            user = "user",
            password = "password")

    transactions {
        SchemaUtils.create(Users)
    }
}

INSERT

fun main() {
    Database.connect("jdbc://mysql//host/databasename",
            driver = "com.mysql.jdbc.Driver",
            user = "user",
            password = "password")

    transactions {
        SchemaUtils.create(Users)

        val id = Users.insert {
            it[name] = "UserName"
            it[age] = 20
        } get Users.id
    }
}