MariaDB
 sql >> Baza danych >  >> RDS >> MariaDB

Pierwsze kroki z MariaDB przy użyciu Dockera, Java Spring i JDBC

Od czasu rozwidlenia z MySQL w 2009 roku MariaDB stała się jedną z najpopularniejszych baz danych wybieranych przez programistów w ciągu ostatniej dekady. Podczas gdy wielu technologów prawdopodobnie skłaniało się ku temu rozwiązaniu ze względu na jego korzenie open source i to, że jest zakorzenione w świecie relacyjnych baz danych, to tak naprawdę dopiero zaczyna zarysować powierzchnię tego, co MariaDB ma do zaoferowania.

Z biegiem lat MariaDB odeszła od MySQL, dodając wiele funkcji i funkcjonalności, z których większości nie będziemy mogli się zagłębić w kontekście tego artykułu. Jednak jedna rzecz, przede wszystkim, pozostała taka sama; dostarczanie nowoczesnego, open-source, wysokiej jakości rozwiązania bazodanowego, które programiści mogą wykorzystać do napędzania innowacji.

Ale zanim będziesz mógł zagłębić się w MariaDB i sprawdzić wszystko, co ma do zaoferowania, musisz odpowiedzieć na najbardziej podstawowe pytania; jak zacząć korzystać z MariaDB?

MariaDB i Java Database Connectivity (JDBC)

Prawdopodobnie nie jest zaskoczeniem, że Java, a ostatecznie środowisko Java Virtual Machine (JVM) jako całość, jest niezwykle popularną opcją stosowaną przez programistów do tworzenia aplikacji.

Mając to na uwadze, napisałem ten krótki przewodnik, który poprowadzi Cię przez kroki niezbędne do rozpoczęcia pracy z MariaDB (Community Server) przy użyciu obrazu Docker, Javy i klienta MariaDB JDBC.

W tym przewodniku wykorzystasz MariaDB i JDBC do stworzenia prostej (opartej na Maven) aplikacji typu „Do zrobienia”, która przy użyciu Java Spring będzie udostępniać różne punkty końcowe do wykonania podstawowego CRUD (utwórz-odczytaj-aktualizuj-usuń ) operacje na instancji bazy danych MariaDB.

Zaczynajmy!

Wymagania

Zanim przejdziesz do kodu, musisz upewnić się, że masz kilka rzeczy na swoim komputerze:

  • Klient MariaDB
  • Dokowane
  • Java (wersja 8+)
  • Curl (do testowania punktów końcowych interfejsu API)

Tworzenie nowej instancji MariaDB za pomocą Dockera

Jednym z najprostszych sposobów rozpoczęcia korzystania z MariaDB, niezależnie od używanego systemu operacyjnego, jest pobranie obrazu platformy Docker MariaDB Server z Docker Hub i utworzenie z niego nowego kontenera.

Aby to zrobić, po prostu otwórz okno terminala i uruchom następujące polecenie:

$ docker run -p 3306:3306 -d --name mariadb -eMARIADB_ROOT_PASSWORD=Password123! mariadb/server:10.4 

Otóż ​​to. Powinieneś teraz mieć uruchomioną instancję MariaDB. Całkiem bezbolesne, prawda?

Instancję można potwierdzić w kontenerze Docker, uruchamiając następujące polecenie:

$ docker ps

Powinieneś zobaczyć swój kontener w danych wyjściowych.

Łączenie z MariaDB

Teraz, gdy masz już uruchomioną instancję MariaDB Server w nowym kontenerze Docker, następnym krokiem będzie połączenie się z instancją bazy danych i komunikowanie się z nią za pomocą klienta MariaDB.

Istnieje wiele klientów SQL dostępnych na wolności. Dla uproszczenia postanowiłem zademonstrować, jak korzystać z oficjalnego klienta MariaDB, ale z pewnością możesz używać dowolnego klienta.

Połącz się z instancją MariaDB, wykonując następujące czynności:

$ mariadb --host 127.0.0.1 -P 3306 --user root -pPassword123!

Powinieneś zobaczyć coś takiego jak poniżej, co oznacza, że ​​udało Ci się połączyć z instancją MariaDB!

Po połączeniu możesz utworzyć nową bazę danych.

CREATE DATABASE todo;

Następnie utwórz nową tabelę.

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)
);

Pierwsze kroki z Java Spring, JDBC i MariaDB

Po uruchomieniu instancji bazy danych i utworzeniu schematu możesz rozpocząć tworzenie nowej aplikacji Java.

Utwórz projekt Maven

Zacznij od wejścia na stronę https://start.spring.io, która umożliwi Ci utworzenie nowego projektu Maven opartego na Springu. Dla tego projektu możesz wprowadzić następujące kryteria.

Następnie dodaj następujące zależności:

  • Lombok: Biblioteka, która wyeliminuje konieczność tworzenia kodu płyty kotłowej (np. getterów, seterów) w obrębie obiektów domeny.
  • Wiosenna sieć: Biblioteka do tworzenia i eksponowania punktów końcowych API RESTful.
  • Spring Data JPA: Biblioteka, która zapewnia abstrakcje, które pomagają wyeliminować kod płyty kotłowej do łączenia się z bazami danych i komunikacji z nimi.

Na koniec kliknij przycisk „GENERUJ”, aby utworzyć i pobrać projekt (zawarty w pliku .zip) do wybranej lokalizacji na komputerze.

Dodaj złącze MariaDB R2DBC

Przejdź do lokalizacji, do której pobrano nowy projekt Maven (plik .zip) i rozpakuj. Następnie użyj edytora kodu, aby otworzyć projekt i otwórz pom.xml.

Dodaj nową zależność dla łącznika JDBC MariaDB do kolekcji zależności.

<dependency>             
   <groupId>org.mariadb.jdbc</groupId>           
   <artifactId>mariadb-java-client</artifactId>
   <version>2.6.0</version>
</dependency>

Przygotowywanie integracji danych

Teraz, gdy stworzyłeś projekt, który zawiera wszystkie potrzebne zależności, przejdź do kodu Java. Zazwyczaj lubię zacząć od stworzenia klas encji.

Przejdź do /src/main/java/com/mariadb/todo , utwórz nowy folder o nazwie „domena” i utwórz w nim nowy plik o nazwie „Zadanie.java”.

Otwórz „Task.java” i dodaj następujący kod.

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;
}

Następnie utwórz nowy folder o nazwie „repozytoria” w /src/main/java/com/mariadb/todo i utwórz w nim nowy plik o nazwie "TaskRepository.java".

Otwórz „TaskRepository.java” i dodaj następujący kod.

package com.mariadb.todo.repositories;

import com.mariadb.todo.domain.Task;

import org.springframework.data.repository.CrudRepository;

public interface TaskRepository extends CrudRepository<Task, Integer> {
}

Jak sama nazwa wskazuje, interfejs CrudRepository zapewnia podstawowe operacje CRUD w repozytorium dla typu ogólnego (w tym przypadku klasy Task) i typu klucza podstawowego dla tego typu ogólnego.

Utwórz usługę danych

Usługi mogą służyć do zarządzania logiką biznesową aplikacji. Jedyna usługa, TaskService, w tej aplikacji służy do sprawdzania poprawności obiektu Task i integracji z TaskRepository.

Utwórz nowy folder o nazwie „usługi” w /src/main/java/com/mariadb/todo i utwórz w nim nowy plik o nazwie „TaskService.java”.

Otwórz „TaskService.java” i dodaj następujący kod.

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);
    }
}

Pokaż punkty końcowe interfejsu API

Na koniec musisz utworzyć kontroler, aby odsłonić cztery punkty końcowe, których można użyć do wykonywania podstawowych operacji CRUD na zadaniach.

Utwórz nowy folder o nazwie „kontrolery” w /src/main/java/com/mariadb/todo i utwórz w nim nowy plik o nazwie „TaskController.java”.

Otwórz „TaskController.java” i dodaj następujący kod.

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();
    }
}

Testowanie

Teraz, gdy wszystko zostało już skonstruowane, czas to przetestować!

Najpierw zbuduj aplikację.

$ mvn package

A potem go uruchom.

$ mvn spring-boot:run

Najpierw zacznij od dodania nowego zadania do swojej listy rzeczy do zrobienia.

$ curl --header "Content-Type: application/json" \
  --request POST \
  --data '{"description":"A New Task"}' \
  http://localhost:8080/api/tasks

Chociaż z pewnością możesz wysłać zapytanie bezpośrednio do bazy danych, aby potwierdzić, że dodano nowy rekord zadania, gdzie jest w tym zabawa? Powrót do API!

$ curl https://localhost:8080/api/tasks

Jeśli wszystko pójdzie dobrze, powinieneś otrzymać następującą odpowiedź JSON:

{ "id": 1, "description": "A New Task", "completed": false }

Voilà, w pełni reaktywna aplikacja Java Spring korzystająca z JDBC i MariaDB! Aby wyświetlić ten kod w całości, sprawdź źródło tutaj. A jeśli zastanawiasz się, „byłoby miło zobaczyć implementację z interfejsem użytkownika”, masz szczęście! Możesz znaleźć w pełni dopracowaną implementację aplikacji TODO za pomocą React.js i wybór wielu projektów API
(R2DBC, JDBC, Node.js i Python), które integrują się bezpośrednio z MariaDB tutaj!

Dopiero zaczynam

Teraz, po pomyślnym utworzeniu nowego projektu Maven przy użyciu Spring Data JPA, JDBC i MariaDB, masz wszystkie narzędzia potrzebne do rozpoczęcia tworzenia w pełni reaktywnych aplikacji, wykorzystujących własne możliwości MariaDB! , sugestie lub wątpliwości dotyczące tego posta na blogu, proszę daj mi znać tutaj lub skontaktuj się ze mną bezpośrednio na Twitterze pod adresem @probablyrealrob!Dziękujemy za poświęcenie czasu na przeczytanie tego i miłego kodowania!


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. 3 sposoby na uzyskanie nazwy dnia z randki w MariaDB

  2. Jak STR_TO_DATE() działa w MariaDB

  3. 4 sposoby sprawdzenia, czy tabela istnieje w MariaDB

  4. Wskazówki i porady dotyczące wdrażania kontroli dostępu opartej na rolach bazy danych w MariaDB

  5. Porównanie ręcznych wdrożeń baz danych z wdrożeniami automatycznymi