Откакто беше разклонена от MySQL през 2009 г., MariaDB се превърна в една от най-популярните бази данни по избор за разработчиците през последното десетилетие. Въпреки че много технолози вероятно са гравитирали към него като решение поради корените му с отворен код и че е вкоренен в света на релационните бази данни, това наистина само започва да надраска повърхността на това, което MariaDB може да предложи.
През годините MariaDB се отклони от MySQL, като добави много функции и функционалности, голяма част от които няма да можем да се потопим в контекста на тази статия. Но едно нещо, преди всичко останало, е останало същото; предоставяне на модерно, отворен код, висококачествено решение за база данни, което разработчиците могат да използват за захранване на своите иновации.
Но преди да можете да се потопите в MariaDB и да проверите всичко, което може да предложи, ще трябва да отговорите на най-основните въпроси; как да започнете да използвате MariaDB?
MariaDB и Java Database Connectivity (JDBC)
Вероятно не е изненада, че Java и в крайна сметка средата на Java Virtual Machine (JVM) като цяло е изключително популярна опция, използвана от разработчиците за създаване на приложения.
Имайки това предвид, написах това кратко ръководство, за да ви преведа през стъпките за започване на работа с MariaDB (Community Server) с помощта на Docker изображение, Java и MariaDB JDBC клиента.
В това ръководство ще използвате MariaDB и JDBC, за да създадете просто (базирано на Maven) приложение „To do“, което, използвайки Java Spring, ще разкрие различни крайни точки за използване за изпълнение на основния CRUD (създаване-четене-актуализация-изтриване ) операции върху екземпляр на база данни MariaDB.
Да започваме!
Изисквания
Преди да преминете към кода, ще трябва да се уверите, че имате няколко неща на вашата машина:
- клиент на MariaDB
- Docker
- Java (версия 8+)
- Curl (за тестване на крайните точки на API)
Създаване на нов екземпляр на MariaDB с помощта на Docker
Един от най-простите начини да започнете с MariaDB, независимо коя операционна система използвате, е да изтеглите изображението на MariaDB Server Docker от Docker Hub и да го използвате за създаване на нов контейнер.
За да направите това, просто отворете прозорец на терминала и изпълнете следното:
$ docker run -p 3306:3306 -d --name mariadb -eMARIADB_ROOT_PASSWORD=Password123! mariadb/server:10.4
Това е. Вече трябва да имате работещ екземпляр на MariaDB. Доста безболезнено, нали?
Можете да потвърдите екземпляра в Docker контейнер, като изпълните следното:
$ docker ps
И трябва да видите вашия контейнер в изхода.
Свързване с MariaDB
Сега, когато имате работещ екземпляр на MariaDB Server в нов Docker контейнер, следващата стъпка ще бъде да се свържете и да комуникирате с екземпляра на базата данни с помощта на MariaDB клиента.
Има много SQL клиенти, налични в дивата природа. За простота избрах да демонстрирам как да използвам официалния клиент на MariaDB, но със сигурност се чувствайте свободни да използвате какъвто клиент предпочитате.
Свържете се с вашия MariaDB екземпляр, като изпълните следното:
$ mariadb --host 127.0.0.1 -P 3306 --user root -pPassword123!
Трябва да видите нещо като следното, което означава, че сте се свързали успешно с екземпляра на MariaDB!
След като се свържете, можете да създадете нова база данни.
CREATE DATABASE todo;
След това създайте нова таблица.
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)
);
Първи стъпки с Java Spring, JDBC и MariaDB
С разработен екземпляр на база данни и създадена схема, вие сте готови да създадете ново Java приложение.
Създайте проект на Maven
Започнете, като отидете до https://start.spring.io, което ще ви позволи да създадете нов базиран на Spring проект Maven . За този проект можете да въведете следните критерии.
След това добавете следните зависимости:
- Ломбок: Библиотека, която ще елиминира необходимостта от създаване на код на стандартна табела (напр. getters, setters) в рамките на обектите на домейна.
- Пролетна мрежа: Библиотека за създаване и излагане на крайни точки на RESTful API.
- JPA Spring Data: Библиотека, която предоставя абстракции, за да помогне за елиминирането на кода на котела за свързване и комуникация с бази данни.
Накрая щракнете върху бутона „ГЕНЕРИРАНЕ“, за да създадете и изтеглите проекта (съдържащ се в .zip файл) на желано място на вашата машина.
Добавете конектора MariaDB R2DBC
Придвижете се до мястото, където сте изтеглили новия проект на Maven (.zip файл) и го разархивирайте. След това използвайте редактор на код, за да отворите проекта и отворете pom.xml.
Добавете нова зависимост за JDBC конектора на MariaDB към колекцията от зависимости.
<dependency>
<groupId>org.mariadb.jdbc</groupId>
<artifactId>mariadb-java-client</artifactId>
<version>2.6.0</version>
</dependency>
Подготовка на интегрирането на данни
Сега, когато сте създали проект, който съдържа всички зависимости, които ще ви трябват, трябва да преминете към Java кода. Обикновено обичам да започна със създаване на класове на обекти.
Отидете до /src/main/java/com/mariadb/todo , създайте нова папка, наречена "domain", и създайте нов файл в нея с име "Task.java".
Отворете "Task.java" и добавете следния код.
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;
}
След това създайте нова папка, наречена "хранилища" в /src/main/java/com/mariadb/todo и създайте нов файл в него с име "TaskRepository.java".
Отворете "TaskRepository.java" и добавете следния код.
package com.mariadb.todo.repositories;
import com.mariadb.todo.domain.Task;
import org.springframework.data.repository.CrudRepository;
public interface TaskRepository extends CrudRepository<Task, Integer> {
}
Както подсказва името, интерфейсът CrudRepository осигурява основни CRUD операции върху хранилище за общ тип (вашият клас Task в този случай) и тип първичен ключ за този общ тип.
Създайте услуга за данни
Услугите могат да се използват за управление на бизнес логиката на вашето приложение. Единствената услуга, TaskService, в това приложение се използва за валидиране на обект Task и интегриране с TaskRepository.
Създайте нова папка, наречена „services“ в /src/main/java/com/mariadb/todo и създайте нов файл в него с име "TaskService.java".
Отворете "TaskService.java" и добавете следния код.
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);
}
}
Излагане на крайни точки на API
И накрая, ще трябва да създадете контролер, който да показва четири крайни точки, които могат да се използват за извършване на основните CRUD операции върху вашите задачи.
Създайте нова папка, наречена „контролери“ в /src/main/java/com/mariadb/todo, и създайте ново поле в нея с име „TaskController.java“.
Отворете "TaskController.java" и добавете следния код.
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();
}
}
Изпробване
Сега, когато всичко е конструирано, е време да го тестваме!
Първо, изградете приложението.
$ mvn package
И след това го стартирайте.
$ mvn spring-boot:run
Първо, започнете с добавяне на нова задача към вашия списък със задачи.
$ curl --header "Content-Type: application/json" \
--request POST \
--data '{"description":"A New Task"}' \
http://localhost:8080/api/tasks
Въпреки че със сигурност можете да направите заявка към базата данни директно, за да потвърдите, че е добавен нов запис за задача, къде е забавното в това? Обратно към API!
$ curl https://localhost:8080/api/tasks
Ако всичко върви добре, трябва да получите следния JSON отговор:
{ "id": 1, "description": "A New Task", "completed": false }
Voilà, напълно реактивно Java Spring приложение, използващо JDBC и MariaDB! За да видите този код в неговата цялост, вижте източника тук. И ако се чудите „би било хубаво да видите реализация с потребителски интерфейс“, имате късмет! Можете да намерите напълно изчерпателна реализация на TODO приложение, използвайки React.js и избора си от множество API проекти
(R2DBC, JDBC, Node.js и Python), които се интегрират директно с MariaDB тук!
Тепърва започвам
Сега, когато успешно създадохте нов проект на Maven, използвайки Spring Data JPA, JDBC и MariaDB, имате всички необходими инструменти, за да започнете да създавате напълно реактивни приложения, използвайки собствената си сила на MariaDB! Ако имате някакви въпроси , предложения или притеснения относно тази публикация в блога, моля, уведомете ме тук или се свържете с мен директно в Twitter на @probablyrealrob! Благодаря, че отделихте време да прочетете това и приятно кодиране!