最近趣味で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
}
}