Spring Boot dan Database MySQL

Melanjutkan artikel Tutorial Dasar Spring Boot untuk Developer Java, pada kesempatan kali ini kita akan mencoba menyimpan data ke dalam database MySQL. Dalam dunia pemrograman, koneksi ke database sudah sangat umum bahkan menjadi hal yang wajib apabila kita ingin membuat aplikasi / website. Bagaimana caranya? Stay tune…


Berikut adalah langkah-langkah yang akan kita lakukan:

  1. Buat database dan Tabel
  2. Tambahkan library pada aplikasi
  3. Setup koneksi aplikasi ke database
  4. Buat Entity dan Repository class
  5. Implementasi

1. Buat Database dan Tabel

Pertama kita harus siapkan Mysql dahulu. Kemudian buat database. Bisa menggunakan SQL dibawah ini, atau apabila kalian menggunakan tools seperti DBeaver, MySQL Workbench, atau lainnya itu akan lebih mudah.

CREATE DATABASE `todo`;

Kemudian buat struktur table seperti dibawah ini.

Dengan SQL dibawah ini

CREATE TABLE `todo` (
  `id` int(16) PRIMARY KEY NOT NULL AUTO_INCREMENT,
  `title` varchar(100) NOT NULL,
  `content` text DEFAULT NULL
);

2. Tambahkan Library Pada Aplikasi

Untuk menambahkan library, Spring sudah support dengan dua dependency manager yaitu Maven dan Gradle. Silakan sesuaikan dengan dependency manager yang teman-teman pakai. Agar aplikasi kita bisa melakukan transaksi ke Database, kita butuh dua library tambahan yaitu

  1. Mysql Driver
    Karena kita menggunakan database MySQL, maka diperlukan driver agar aplikasi kita dapat terhubung. Untuk database lain seperti MariaDB, MongoDB, dll bisa menggunakan masing-masing driver library yang telah disediakan.
  2. Spring JPA
    Sebagai persistent data layer dan ORM agar kita dapat dengan mudah melakukan query semudah memanggil sebuah fungsi.

Maven

Apabila kalian menggunakan Maven, list dependency ada pada file pom.xml. Untuk menambahkan library ubah menjadi seperti dibawah ini

<?xml version="1.0" encoding="UTF-8"?>
<project>
    ....
    ....

    <dependencies>
        ...
        ...

        <dependency>
		<groupId>org.springframework.boot</groupId>
		<artifactId>spring-boot-starter-data-jpa</artifactId>
	</dependency>

	<dependency>
		<groupId>mysql</groupId>
		<artifactId>mysql-connector-java</artifactId>
		<scope>runtime</scope>
	</dependency>
    </dependencies>

    ...
</project>

Gradle

Apabila menggunakan Gradle, buka file build.gradle dan tambahkan dependency seperti dibawah ini

dependencies {
	...
	...
	
	implementation 'org.springframework.boot:spring-boot-starter-data-jpa'
	runtimeOnly 'mysql:mysql-connector-java'
	
	...
	...
}

Jangan lupa reload dependency manager untuk download library-nya.

3. Setup Koneksi Aplikasi ke Database

Setelah meng-install driver kedalam aplikasi, kita harus menambahkan konfigurasi database kita ke dalam aplikasi kita. Sehingga aplikasi tau harus dikoneksikan kemana dan database apa.

Untuk konfigurasi di Spring, sudah support AutoConfiguration. Sehingga konfigurasi tidak perlu dilakukan didalam code Java / Kotlin melainkan tinggal kita tambahkan alamat dan credentials database. Tambah lagi, untuk konfigurasi di Spring bisa di-set dalam dua format, properties file atau yml file. Keduanya sama saja, hanya berbeda dari format konfig yang kita berikan.

Properties File

By default file ini sudah ada tinggal kita isikan konfig-konfig yang akan kita gunakan, namanya application.properties. Untuk konfigurasi koneksi ke database tambahkan dibawah ini kedalam file tersebut

spring.jpa.properties.dialect=org.hibernate.dialect.MySQL5InnoDBDialect
spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
spring.datasource.url=jdbc:mysql://localhost:3306/todo?serverTimezone=Asia/Jakarta
spring.datasource.username=root
spring.datasource.password=root

YML File

Apabila kalian lebih familiar dengan format YML, tinggal ubah extension file application.properties menjadi application.yml. Kemudian tambahkan dibawah ini

spring:
  jpa:
    properties:
      dialect: org.hibernate.dialect.MySQL5InnoDBDialect
  datasource:
    driver-class-name: com.mysql.cj.jdbc.Driver
    url: jdbc:mysql://localhost:3306/todo?serverTimezone=Asia/Jakarta
    username: root
    password: root

4. Buat Entity dan Repository class

Entity adalah class yang kita gunakan sebagai representasi class Java / Kotlin terhadap table pada database. Sedangkan Repository adalah fitur yang disediakan oleh JPA untuk men-translate function menjadi query yang akan di eksekusi oleh aplikasi.

Entity

Dari table todo yang sudah kita buat diatas, kira-kira entity nya bakal jadi seperti dibawah ini

@Entity
@Table(name = "todo")............................ (1)
data class Todo(

    @Id.......................................... (2)
    @Column(name = "id")......................... (3)
    val id: Long? = null,

    @Column(name = "title")...................... (3)
    val title: String? = null,

    @Column(name = "content").................... (3)
    val content: String? = null,
)

Dari snippet diatas bisa kita simpulkan bahwa

  1. @Table menandakan bahwa class Todo adalah representasi dari table todo
  2. @Id menandakan bahwa variable id adalah sebuah primary key dari table todo
  3. @Column menandakan bahwa variable id adalah representasi dari field id di table todo

Nah dengan entity ini kita sudah punya table todo didalam aplikasi kita.

Repository

Kita menggunakan Repository untuk melakukan transaksi dari aplikasi ke database. Kita bisa menggunakan native query untuk eksekusi sebuah query Mysql, atau kita bisa menggunakan QueryDSL nya Spring untuk mempermudah kita dalam eksekusi query. Cara kedua memungkinkan kita untuk membuat function yang nantinya akan di translate menjadi query. Detailnya bisa dibaca disini.

Untuk kasus kita, kita coba untuk membuat query SELECT dari table todo.

interface TodoRepository : JpaRepository<Todo, Long> { .......... (1)

    fun findByTitle(inputTitle: String): List<Todo> ............. (1)
    
}

Berikut penjelasannya

  1. Meng-implementasikan interface JpaRepository yang digunakan sebagai repository untuk class Todo yang memiliki ID dengan tipe data Long.
  2. Kita membuat query SELECT * FROM todo WHERE title = {{ inputTitle }} . Karena hasil query bisa menghasilkan lebih dari satu data. Maka kita set balikannya adalah List.

5. Implementasi

Untuk menggunakan-nya, kita bisa memanggil class TodoRepository kemudian panggil function yang ingin kita eksekusi. Semudah snippet dibawah ini

class TodoService {

    @Autowired
    private lateinit var todoRepository: TodoRepository

    fun saveTodo() {
        val todo = Todo(
            title = "Harga Minyak tanggal 6 Juni 2022",
            content = "Harga minyak Baygon. Di Mang Ujang 40ribu"
        )
        todoRepository.save(todo)
    }

    fun getTodos(title: String): List<Todo> {
        return todoRepository.findByTitle(title)
    }
}

Masih banyak magic-magic lain yang ditawarkan Spring Framework dalam pembuatan aplikasi. Tunggu artikel selanjutnya yaa…

You Might Also Like

Leave a Reply

Your email address will not be published. Required fields are marked *