Ktor×Exposed MySQL 연결

8123 단어 MySQLKtorexposed
계속됩니다.
Exposed 를 이용해, 로컬 MySQL DB 에의 접속을 구현합니다.

환경


  • MySQL: Ver 8.0.23 for osx10.15 on x86_64 (Homebrew)

  • 절차


  • 프로젝트에 Exposed 추가
  • MySQL에 DB 작성
  • DB에 연결
  • 데이터 액세스

  • 1. 프로젝트에 Exposed 추가


    build.gradle 에 필요한 라이브러리 추가
    mysql-connector-java : JDBC 드라이버를 내포하고 있습니다. 어쩌면 로컬 MySQL과 버전 맞추어 두면 OK.
    dependencies {
        
        implementation "org.jetbrains.exposed:exposed:0.17.13"
        implementation "mysql:mysql-connector-java:8.0.23"
    }
    

    변경 사항을 적용하고 설치합니다.


    2. MySQL에 DB 작성



    접속 확인을 위해 MySQL에 간단한 데이터를 작성해 둡니다.
    mysql> USE ktor_example;
    Database changed
    
    mysql> SHOW tables;
    +------------------------+
    | Tables_in_ktor_example |
    +------------------------+
    | animal                 |
    +------------------------+
    
    mysql> DESCRIBE animals;
    +-------+------+------+-----+---------+----------------+
    | Field | Type | Null | Key | Default | Extra          |
    +-------+------+------+-----+---------+----------------+
    | id    | int  | NO   | PRI | NULL    | auto_increment |
    | name  | text | NO   |     | NULL    |                |
    | cry   | text | YES  |     | NULL    |                |
    +-------+------+------+-----+---------+----------------+
    
    mysql> SELECT * FROM animals;
    +----+-----------------------+--------------------+
    | id | name                  | cry                |
    +----+-----------------------+--------------------+
    |  1 | ゴリラ                 | ウホウホ            |
    |  2 | オランウータン          | アァー!             |
    |  3 | サル                   | うきゃうきゃ         |
    +----+-----------------------+--------------------+
    

    3. DB에 연결


    Database.connect 로 DB에 연결할 수 있습니다.
    파라미터 url , user , password 는 각각의 설정에 맞추어 주십시오.

    Application.kt
    private fun connectDB() {
        Database.connect(
            url = "jdbc:mysql://127.0.0.1/ktor_example",
            driver = "com.mysql.cj.jdbc.Driver",
            user = "root",
            password = "password"
        )
    }
    
    @kotlin.jvm.JvmOverloads
    fun Application.module(testing: Boolean = false) {
        connectDB()
        
    

    4. 데이터 액세스



    htps : // 기주 b. 코 m / 지 tB 라이언 s / 에 x 포세 d / 우키 / 갓찐 g-S rd d # dsl-
    위를 참고로 DSL 형식으로 액세스해 보겠습니다.

    테이블 정의


    Table를 상속받은 객체를 만듭니다.
    테이블명과 컬럼명은 DB에 작성한 것과 일치합니다.

    src/db/table/Tables.kt
    object Animals : IntIdTable() {
        val name = varchar("name", 200)
        val cry = varchar("cry", 200).nullable()
    }
    

    데이터 획득



    잡입니다만 /animals 라우팅에 데이터 전건 취득하는 처리를 기술(다음 장에서 깨끗하게 할 예정)selectAll() 에서 테이블의 모든 레코드를 검색할 수 있습니다.

    Application.kt
    get("/animals") {
        var animals = listOf<Animal>()
        transaction {
            animals = Animals.selectAll().map {
                Animal(
                    id = it[Animals.id].value,
                    name = it[Animals.name].toString(),
                    cry = it[Animals.cry].toString()
                )
            }
        }
        call.respond(animals)
    }
    
    // 扱いやすくする為にAnimalデータクラス作成
    data class Animal(
        val id: Int,
        val name: String,
        val cry: String?,
    )
    

    동작 확인


    http://0.0.0.0:8080/animals 로 이동하여 DB에 작성한 데이터가 표시되는지 확인 🦍🦧🐒



    참고


  • JetBrains/Exposed - Getting Started
  • 좋은 웹페이지 즐겨찾기