sql >> Database teknologi >  >> RDS >> MariaDB

Kom godt i gang med MariaDB ved hjælp af Docker, Java Spring og JDBC

Siden hun blev forgrenet fra MySQL tilbage i 2009, er MariaDB blevet en af ​​de mest populære databaser for udviklere i løbet af det seneste årti. Mens mange teknologer sandsynligvis har trukket sig til det som en løsning på grund af dets open source-rødder, og at det er forankret i den relationelle databaseverden, begynder det egentlig kun at ridse overfladen af, hvad MariaDB har at tilbyde.

I årenes løb har MariaDB afveget fra MySQL ved at tilføje mange funktioner og funktionalitet, hvoraf vi ikke vil være i stand til at dykke ned i en stor del af denne artikel. Én ting er dog frem for alt forblevet den samme; leverer en moderne, open source-databaseløsning af høj kvalitet, som udviklere kan bruge til at drive deres innovation.

Men før du kan dykke ned i MariaDB og tjekke alt det har at tilbyde, skal du besvare de mest grundlæggende spørgsmål; hvordan kommer du i gang med at bruge MariaDB?

MariaDB og Java Database Connectivity (JDBC)

Det kommer sandsynligvis ikke som nogen overraskelse, at Java, og i sidste ende Java Virtual Machine (JVM) miljøet som helhed, har været en ekstremt populær mulighed brugt af udviklere til at skabe applikationer.

Med det i tankerne har jeg skrevet denne korte gennemgang for at tage dig gennem trinene til at komme i gang med MariaDB (Community Server) ved hjælp af et Docker-image, Java og MariaDB JDBC-klienten.

I denne gennemgang vil du bruge MariaDB og JDBC til at skabe en simpel (Maven-baseret) "To do"-applikation, der ved hjælp af Java Spring vil afsløre en række endepunkter, der skal bruges til at udføre grundlæggende CRUD (create-read-update-delete ) operationer på en MariaDB-databaseinstans.

Lad os komme i gang!

Krav

Før du hopper ind i kode, skal du sikre dig, at du har et par ting på din maskine:

  • MariaDB-klient
  • Docker
  • Java (v. 8+)
  • Curl (til test af API-endepunkter)

Oprettelse af en ny MariaDB-instans ved hjælp af Docker

En af de enkleste måder at komme i gang med MariaDB på, uanset hvilket operativsystem du bruger, er at hente MariaDB Server Docker-billedet fra Docker Hub og bruge det til at oprette en ny container.

For at gøre dette skal du blot åbne et terminalvindue og køre følgende:

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

Det er det. Du skulle nu have en kørende forekomst af MariaDB. Ret smertefrit, ikke?

Du kan bekræfte forekomsten i en Docker-container ved at køre følgende:

$ docker ps

Og du bør se din beholder i outputtet.

Opretter forbindelse til MariaDB

Nu hvor du har en kørende MariaDB Server-instans i en ny Docker-container, vil næste trin være at oprette forbindelse til og kommunikere med databaseinstansen ved hjælp af MariaDB-klienten.

Der er mange SQL-klienter tilgængelige ude i naturen. For nemheds skyld har jeg valgt at demonstrere, hvordan man bruger den officielle MariaDB-klient, men du er helt sikkert velkommen til at bruge den klient, du foretrækker.

Opret forbindelse til din MariaDB-instans ved at udføre følgende:

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

Du skulle se noget i stil med følgende, hvilket betyder, at du har oprettet forbindelse til MariaDB-instansen!

Når du er tilsluttet, kan du oprette en ny database.

CREATE DATABASE todo;

Opret derefter en ny 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)
);

Kom godt i gang med Java Spring, JDBC og MariaDB

Med en databaseforekomst spundet op og oprettet et skema, er du klar til at oprette en ny Java applikation.

Opret et Maven-projekt

Start med at navigere til https://start.spring.io, som gør det muligt for dig at oprette et nyt forårsbaseret Maven-projekt. For dette projekt kan du indtaste følgende kriterier.

Tilføj derefter følgende afhængigheder:

  • Lombok: Et bibliotek, der eliminerer behovet for at oprette kedelpladekode (f.eks. getters, sættere) inden for domæneobjekterne.
  • Forårsweb: Et bibliotek til at skabe og eksponere RESTful API-endepunkter.
  • Forår Data JPA: Et bibliotek, der leverer abstraktioner for at hjælpe med at eliminere kedelpladekode til at oprette forbindelse til og kommunikere med databaser.

Klik til sidst på knappen "GENERER" for at oprette og downloade projektet (indeholdt i en .zip-fil) til en ønsket placering på din maskine.

Tilføj MariaDB R2DBC-stikket

Naviger til den placering, hvor du downloadede det nye Maven-projekt (.zip-fil) til, og udpak. Brug derefter en kodeeditor til at åbne projektet, og åbn pom.xml.

Tilføj en ny afhængighed til MariaDB's JDBC-stik til samlingen af ​​afhængigheder.

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

Forberedelse af dataintegration

Nu hvor du har oprettet et projekt, der indeholder alle de afhængigheder, du har brug for, er det at springe ind i Java-koden. Typisk kan jeg godt lide at starte med at oprette enhedsklasserne.

Naviger til /src/main/java/com/mariadb/todo , opret en ny mappe kaldet "domæne", og opret en ny fil i den med navnet "Task.java".

Åbn "Task.java" og tilføj følgende kode.

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

Derefter skal du oprette en ny mappe kaldet "repositories" i /src/main/java/com/mariadb/todo , og opret en ny arkiveret i den med navnet "TaskRepository.java".

Åbn "TaskRepository.java" og tilføj følgende kode.

package com.mariadb.todo.repositories;

import com.mariadb.todo.domain.Task;

import org.springframework.data.repository.CrudRepository;

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

Som navnet antyder, giver CrudRepository grænsefladen grundlæggende CRUD-handlinger på et lager for en generisk type (din opgaveklasse i dette tilfælde) og den primære nøgletype for den generiske type.

Opret en datatjeneste

Tjenester kan bruges til at administrere din applikations forretningslogik. Den eneste tjeneste, TaskService, i denne applikation bruges til at validere et Task-objekt og integrere med TaskRepository.

Opret en ny mappe kaldet "tjenester" i /src/main/java/com/mariadb/todo , og opret en ny arkiveret i den med navnet "TaskService.java".

Åbn "TaskService.java" og tilføj følgende kode.

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

Afslør API-endepunkter

Til sidst skal du oprette en controller for at afsløre fire endepunkter, der kan bruges til at udføre de grundlæggende CRUD-operationer på dine opgaver.

Opret en ny mappe kaldet "controllere" i /src/main/java/com/mariadb/todo, og opret en ny mappe med navnet "TaskController.java".

Åbn "TaskController.java" og tilføj følgende kode.

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

Test det af

Nu hvor alt er blevet bygget, er det tid til at teste det!

Først skal du bygge applikationen.

$ mvn package

Og så kør den.

$ mvn spring-boot:run

Start først med at tilføje en ny opgave til din opgaveliste.

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

Selvom du helt sikkert kan forespørge databasen direkte for at bekræfte, at en ny opgavepost er blevet tilføjet, hvor er det sjove i det? Tilbage til API'et!

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

Hvis alt går godt, bør du modtage følgende JSON-svar:

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

Voilà, en fuldt reaktiv Java Spring-applikation, der bruger JDBC og MariaDB! For at se denne kode i sin helhed, tjek kilden her. Og hvis du undrer dig over "det ville helt sikkert være rart at se en implementering med en brugergrænseflade", er du heldig! Du kan finde en fuldt udbygget implementering af en TODO-applikation ved hjælp af React.js og dit valg af flere API-projekter
(R2DBC, JDBC, Node.js og Python), der integreres direkte med MariaDB her!

Lige ved at komme i gang

Nu hvor du med succes har oprettet et nyt Maven-projekt ved hjælp af Spring Data JPA, JDBC og MariaDB, har du alle de værktøjer, du skal bruge for at komme i gang med at skabe fuldt reaktive applikationer, ved at bruge din egen kraft fra MariaDB!Hvis du har spørgsmål , forslag eller bekymringer med dette blogindlæg, så fortæl mig det her eller kontakt mig direkte på Twitter på @probablyrealrob! Tak fordi du tog dig tid til at læse dette og god kodning!


  1. SQL Azure:Database XXXYYY på serveren er ikke tilgængelig i øjeblikket

  2. Brug af 'case-udtrykskolonne' i where-sætning

  3. lastInsertId virker ikke i Postgresql

  4. MySql ser ydeevne