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:
- Buat database dan Tabel
- Tambahkan library pada aplikasi
- Setup koneksi aplikasi ke database
- Buat Entity dan Repository class
- 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
- 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. - 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
- @Table menandakan bahwa class Todo adalah representasi dari table
todo
- @Id menandakan bahwa variable
id
adalah sebuah primary key dari tabletodo
- @Column menandakan bahwa variable
id
adalah representasi dari fieldid
di tabletodo
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
- Meng-implementasikan interface JpaRepository yang digunakan sebagai repository untuk class Todo yang memiliki ID dengan tipe data Long.
- Kita membuat query
SELECT * FROM todo WHERE title = {{ inputTitle }}
. Karena hasil query bisa menghasilkan lebih dari satu data. Maka kita set balikannya adalahList
.
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…