Connessione a MySQL con Kotlin, Spring e JPA

Mattepuffo's logo
Connessione a MySQL con Kotlin, Spring e JPA

Connessione a MySQL con Kotlin, Spring e JPA

Sto studiando un pò il framework Spring; e usando Kotlin per rinfrescarlo un pò.

Oggi vediamo come connetterci ad un db MySQL / MariaDB già esistente usando JPA.

Per creare il progetto Spring ho usato l'initializr ufficiale, scegliendo Kotlin come linguaggio.

E Maven; questo solo le dipendenze:

<dependencies>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-web</artifactId>
    </dependency>
    <dependency>
        <groupId>com.fasterxml.jackson.module</groupId>
        <artifactId>jackson-module-kotlin</artifactId>
    </dependency>
    <dependency>
        <groupId>org.jetbrains.kotlin</groupId>
        <artifactId>kotlin-reflect</artifactId>
    </dependency>
    <dependency>
        <groupId>org.jetbrains.kotlin</groupId>
        <artifactId>kotlin-stdlib-jdk8</artifactId>
    </dependency>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-data-jpa</artifactId>
        <version>2.2.6.RELEASE</version>
    </dependency>
    <dependency>
        <groupId>mysql</groupId>
        <artifactId>mysql-connector-java</artifactId>
        <version>8.0.19</version>
    </dependency>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-test</artifactId>
        <scope>test</scope>
        <exclusions>
            <exclusion>
                <groupId>org.junit.vintage</groupId>
                <artifactId>junit-vintage-engine</artifactId>
            </exclusion>
        </exclusions>
    </dependency>
</dependencies>

Dopo aver installato tutto correttamente, dovete modificare il file application.properties che dovreste già avere di default:

spring.datasource.url=jdbc:mysql://localhost:3306/test?useUnicode=true&useJDBCCompliantTimezoneShift=true&useLegacyDatetimeCode=false&serverTimezone=UTC
spring.datasource.username=USERNAME
spring.datasource.password=PASSWORD
spring.datasource.driver-class-name=com.mysql.jdbc.Driver
spring.jpa.hibernate.ddl-auto=update

Le impostazioni che trovate per la connessione (quelle dopo il ? per intenderci) le ho dovute mettere per evitare diversi errori.

Lo step successivo è creare una data class per la nostra tabella:

import javax.persistence.Id
import java.io.Serializable
import javax.persistence.*

@Entity
@Table(name = "persone")
data class Persone(
        @Id
        @GeneratedValue(strategy = GenerationType.AUTO)
        var id: Int = 0,
        var email: String = ""
) : Serializable

Qui dovete fare attenzione a due cose:

  • agli import
  • ai valori di default nel costruttore

Adesso creiamo una interface:

import org.springframework.data.repository.CrudRepository

interface PersoneRepo : CrudRepository<Persone, Int> {
}

La lasceremo vuota, in quanto i metodi verranno auto-generati.

Questo il nostro controller:

import org.springframework.beans.factory.annotation.Autowired
import org.springframework.web.bind.annotation.GetMapping
import org.springframework.web.bind.annotation.ResponseBody
import org.springframework.web.bind.annotation.RestController

@RestController
class PersoneController {

    @Autowired
    internal lateinit var pr: PersoneRepo;

    @GetMapping("/persone")
    @ResponseBody
    fun getAll(): Iterable {
        return pr.findAll();
    }
}

Eseguira una query su tutti i records, e li manderà in output in formato JSON.

Infine il codice che si occupa dell'init dell'applicazione; non è stato modificato da quello originale:

import org.springframework.boot.autoconfigure.SpringBootApplication
import org.springframework.boot.runApplication

@SpringBootApplication
class SpringKotlinApplication

fun main(args: Array<String>) {
	runApplication<SpringKotlinApplication>(*args)
}

Enjoy!


Condividi

Commentami!