Sejak bercabang dari MySQL pada tahun 2009, MariaDB telah menjadi salah satu database pilihan paling populer bagi developer selama dekade terakhir. Sementara banyak teknolog cenderung menganggapnya sebagai solusi karena akarnya yang open source dan berakar di dunia database relasional, itu benar-benar baru mulai menggores permukaan dari apa yang ditawarkan MariaDB.
Selama bertahun-tahun MariaDB telah menyimpang dari MySQL dengan menambahkan banyak fitur dan fungsionalitas, yang sebagian besar tidak akan dapat kami selami dalam konteks artikel ini. Namun, satu hal, di atas segalanya, tetap sama; menyediakan solusi basis data modern, sumber terbuka, dan berkualitas tinggi yang dapat digunakan pengembang untuk mendorong inovasi mereka.
Tetapi sebelum Anda dapat menyelami MariaDB dan memeriksa semua yang ditawarkannya, Anda harus menjawab pertanyaan paling mendasar; bagaimana Anda mulai menggunakan MariaDB?
MariaDB dan Konektivitas Database Java (JDBC)
Mungkin tidak mengherankan bahwa Java, dan pada akhirnya lingkungan Java Virtual Machine (JVM) secara keseluruhan, telah menjadi opsi yang sangat populer yang digunakan oleh pengembang untuk membuat aplikasi.
Dengan mengingat hal itu, saya telah menulis panduan singkat ini untuk memandu Anda melalui langkah-langkah memulai MariaDB (Server Komunitas) menggunakan image Docker, Java, dan klien MariaDB JDBC.
Dalam panduan ini Anda akan menggunakan MariaDB dan JDBC untuk membuat aplikasi "To do" sederhana (berbasis Maven) yang, menggunakan Java Spring, akan mengekspos berbagai titik akhir untuk digunakan melakukan CRUD dasar (buat-baca-perbarui-hapus ) operasi pada instans database MariaDB.
Mari kita mulai!
Persyaratan
Sebelum masuk ke kode, Anda harus memastikan bahwa Anda memiliki beberapa hal di mesin Anda:
- Klien MariaDB
- Pekerja Buruh
- Jawa (v. 8+)
- Curl (untuk menguji titik akhir API)
Membuat instance MariaDB baru menggunakan Docker
Salah satu cara paling sederhana untuk memulai MariaDB, apa pun sistem operasi yang Anda gunakan, adalah dengan menarik image MariaDB Server Docker, dari Docker Hub, dan menggunakannya untuk membuat container baru.
Untuk melakukan ini cukup buka jendela terminal dan jalankan yang berikut:
$ docker run -p 3306:3306 -d --name mariadb -eMARIADB_ROOT_PASSWORD=Password123! mariadb/server:10.4
Itu dia. Anda sekarang harus memiliki instance MariaDB yang sedang berjalan. Cukup tidak menyakitkan, bukan?
Anda dapat mengonfirmasi instance dalam container Docker dengan menjalankan perintah berikut:
$ docker ps
Dan Anda akan melihat wadah Anda di dalam output.
Menghubungkan ke MariaDB
Setelah Anda memiliki instance MariaDB Server yang sedang berjalan di dalam container Docker baru, langkah selanjutnya adalah menghubungkan dan berkomunikasi dengan instance database menggunakan klien MariaDB.
Ada banyak klien SQL yang tersedia di alam liar. Demi kesederhanaan, saya telah memilih untuk mendemonstrasikan cara menggunakan Klien MariaDB resmi, tetapi tentu saja merasa bebas untuk menggunakan klien apa pun yang Anda inginkan.
Hubungkan ke instans MariaDB Anda dengan menjalankan perintah berikut:
$ mariadb --host 127.0.0.1 -P 3306 --user root -pPassword123!
Anda akan melihat sesuatu seperti berikut, yang berarti Anda telah berhasil terhubung ke instance MariaDB!
Setelah Anda terhubung, Anda dapat membuat database baru.
CREATE DATABASE todo;
Kemudian buat tabel baru.
CREATE TABLE todo.tasks (
id INT(11) unsigned NOT NULL AUTO_INCREMENT,
description VARCHAR(500) NOT NULL,
completed BOOLEAN NOT NULL DEFAULT 0,
PRIMARY KEY (id)
);
Memulai Java Spring, JDBC, dan MariaDB
Dengan menjalankan instance database dan skema dibuat, Anda siap membuat aplikasi Java baru.
Buat proyek Maven
Mulailah dengan membuka https://start.spring.io, yang memungkinkan Anda membuat proyek Maven berbasis Musim Semi baru. Untuk proyek ini Anda dapat memasukkan kriteria berikut.
Selanjutnya, tambahkan dependensi berikut:
- Lombok: Pustaka yang akan menghilangkan keharusan membuat kode pelat boiler (mis. getter, setter) di dalam objek domain.
- Web Musim Semi: Pustaka untuk membuat dan mengekspos titik akhir RESTful API.
- Data Musim Semi JPA: Library yang menyediakan abstraksi untuk membantu menghilangkan kode boiler plate untuk menghubungkan dan berkomunikasi dengan database.
Terakhir, klik tombol "GENERATE" untuk membuat dan mengunduh proyek (berisi dalam file .zip) ke lokasi yang diinginkan di mesin Anda.
Tambahkan konektor MariaDB R2DBC
Arahkan ke lokasi tempat Anda mengunduh proyek Maven baru (file .zip), dan unzip. Kemudian gunakan editor kode untuk membuka proyek, dan buka pom.xml.
Tambahkan dependensi baru untuk konektor JDBC MariaDB ke kumpulan dependensi.
<dependency>
<groupId>org.mariadb.jdbc</groupId>
<artifactId>mariadb-java-client</artifactId>
<version>2.6.0</version>
</dependency>
Menyiapkan integrasi data
Sekarang setelah Anda membuat proyek yang berisi semua dependensi yang Anda perlukan, itu adalah untuk melompat ke kode Java. Biasanya, saya suka memulai dengan membuat kelas entitas.
Arahkan ke /src/main/java/com/mariadb/todo , buat folder baru bernama "domain", dan buat file baru di dalamnya bernama "Task.java".
Buka "Task.java" dan tambahkan kode berikut.
package com.mariadb.todo.domain;
import javax.persistence.*;
import lombok.Data;
@Data
@Entity
@Table(name = "tasks")
public class Task {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Integer id;
private String description;
private Boolean completed = false;
}
Selanjutnya, buat folder baru bernama "repositori" di /src/main/java/com/mariadb/todo , dan buat file baru di dalamnya bernama "TaskRepository.java".
Buka "TaskRepository.java" dan tambahkan kode berikut.
package com.mariadb.todo.repositories;
import com.mariadb.todo.domain.Task;
import org.springframework.data.repository.CrudRepository;
public interface TaskRepository extends CrudRepository<Task, Integer> {
}
Seperti namanya, antarmuka CrudRepository menyediakan operasi CRUD dasar pada repositori untuk jenis generik (dalam hal ini kelas Tugas Anda) dan jenis kunci utama untuk jenis generik tersebut.
Buat layanan data
Layanan dapat digunakan untuk mengelola logika bisnis aplikasi Anda. Satu-satunya layanan, TaskService, dalam aplikasi ini digunakan untuk memvalidasi objek Task dan mengintegrasikannya dengan TaskRepository.
Buat folder baru bernama "layanan" di /src/main/java/com/mariadb/todo , dan buat file baru di dalamnya bernama "TaskService.java".
Buka "TaskService.java" dan tambahkan kode berikut.
package com.mariadb.todo.services;
import java.util.Optional;
import com.mariadb.todo.domain.Task;
import com.mariadb.todo.repositories.TaskRepository;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
// Registered as a Spring Service (Component)
@Service
public class TaskService {
// Automatically instantiate (via Spring IoC)
@Autowired
private TaskRepository repository;
//
public Boolean isValid(final Task task) {
if (task != null && !task.getDescription().isEmpty()) {
return true;
}
return false;
}
// Get all records from the tasks table
public Iterable<Task> getAllTasks() {
return this.repository.findAll();
}
// Save a new task record
public Task createTask(final Task task) {
return this.repository.save(task);
}
// Update an existing task record
@Transactional
public Task updateTask(final Task task) {
Optional<Task> ot = this.repository.findById(task.getId());
Task t = ot.get();
t.setDescription(task.getDescription());
t.setCompleted(task.getCompleted());
return this.repository.save(t);
}
// Delete the task record by specified id
@Transactional
public void deleteTask(final int id){
Optional<Task> ot = this.repository.findById(id);
Task t = ot.get();
this.repository.delete(t);
}
}
Mengekspos titik akhir API
Terakhir, Anda harus membuat pengontrol untuk mengekspos empat titik akhir yang dapat digunakan untuk melakukan operasi CRUD dasar pada Tugas Anda.
Buat folder baru bernama "controllers" di /src/main/java/com/mariadb/todo, dan buat file baru di dalamnya bernama "TaskController.java".
Buka "TaskController.java" dan tambahkan kode berikut.
package com.mariadb.todo.controllers;
import com.mariadb.todo.domain.Task;
import com.mariadb.todo.services.TaskService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.DeleteMapping;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.PutMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
@RestController
@RequestMapping("/api/tasks")
public class TaskController {
@Autowired
private TaskService service;
// Get all tasks
@GetMapping()
public ResponseEntity<Iterable<Task>> get() {
return ResponseEntity.ok(this.service.getAllTasks());
}
// Create a new task
@PostMapping()
public ResponseEntity<Task> post(@RequestBody Task task) {
if (service.isValid(task)) {
return ResponseEntity.ok(this.service.createTask(task));
}
return ResponseEntity.status(HttpStatus.I_AM_A_TEAPOT).build();
}
// Update a task
@PutMapping()
public ResponseEntity<Task> put(@RequestBody Task task) {
if (service.isValid(task)) {
return ResponseEntity.ok(this.service.updateTask(task));
}
return ResponseEntity.status(HttpStatus.I_AM_A_TEAPOT).build();
}
// Delete a task
@DeleteMapping()
public ResponseEntity<Void> delete(@RequestParam int id) {
if (id > 0) {
this.service.deleteTask(id);
return ResponseEntity.ok().build();
}
return ResponseEntity.status(HttpStatus.I_AM_A_TEAPOT).build();
}
}
Mengujinya
Sekarang semuanya telah dibangun, saatnya untuk mengujinya!
Pertama, membangun aplikasi.
$ mvn package
Dan kemudian jalankan.
$ mvn spring-boot:run
Pertama, mulailah dengan menambahkan tugas baru ke daftar tugas Anda.
$ curl --header "Content-Type: application/json" \
--request POST \
--data '{"description":"A New Task"}' \
http://localhost:8080/api/tasks
Meskipun Anda pasti dapat menanyakan database secara langsung untuk mengonfirmasi bahwa catatan tugas baru telah ditambahkan, di mana kesenangannya? Kembali ke API!
$ curl https://localhost:8080/api/tasks
Jika semuanya berjalan dengan baik, Anda akan menerima respons JSON berikut:
{ "id": 1, "description": "A New Task", "completed": false }
Voila, aplikasi Java Spring yang sepenuhnya reaktif menggunakan JDBC dan MariaDB! Untuk melihat kode ini secara keseluruhan, lihat sumbernya di sini. Dan jika Anda bertanya-tanya "pasti menyenangkan melihat implementasi dengan antarmuka pengguna", Anda beruntung! Anda dapat menemukan implementasi aplikasi TODO yang sepenuhnya disempurnakan menggunakan React.js dan pilihan Anda dari beberapa proyek API
(R2DBC, JDBC, Node.js, dan Python) yang terintegrasi langsung dengan MariaDB di sini!
Baru memulai
Sekarang setelah Anda berhasil membuat proyek Maven baru menggunakan Spring Data JPA, JDBC, dan MariaDB, Anda memiliki semua alat yang Anda butuhkan untuk mulai membuat aplikasi yang sepenuhnya reaktif, memanfaatkan kekuatan MariaDB, milik Anda sendiri! Jika Anda memiliki pertanyaan , saran atau masalah dengan entri blog ini, beri tahu saya di sini atau hubungi saya langsung di Twitter di @probablyrealrob! Terima kasih telah meluangkan waktu untuk membaca ini dan selamat membuat kode!