Рубрики
Без рубрики

Начало работы с MariaDB с использованием Docker, Java Spring и JDBC

С тех пор, как в 2009 году MariaDB была разветвлена на MySQL, она стала одной из самых популярных баз данных c… С тегами mariadb, java, docker, jdbc.

С тех пор, как был вытеснен из MySQL еще в 2009 году, MariaDB за последнее десятилетие стала одной из самых популярных баз данных для разработчиков. В то время как многие технологи, вероятно, тяготели к нему как к решению из-за его корней с открытым исходным кодом и того, что оно уходит корнями в мир реляционных баз данных, это действительно только начинает царапать поверхность того, что может предложить MariaDB.

На протяжении многих лет MariaDB отличался от MySQL, добавляя множество функций и функциональных возможностей, многие из которых мы не сможем подробно рассмотреть в контексте этой статьи. Однако одно, прежде всего, осталось неизменным: предоставление современного, высококачественного решения для баз данных с открытым исходным кодом, которое разработчики могут использовать для стимулирования своих инноваций.

Но прежде чем вы сможете погрузиться в MariaDB и ознакомиться со всем, что он может предложить, вам нужно ответить на самые фундаментальные вопросы: как вы начинаете использовать MariaDB?

Подключение к базе данных MariaDB и Java (JDBC)

Вероятно, неудивительно, что Java и, в конечном счете, среда Java Virtual Machine (JVM) в целом была чрезвычайно популярным вариантом, используемым разработчиками для создания приложений.

Имея это в виду, я написал это краткое пошаговое руководство, чтобы ознакомить вас с шагами по началу работы с MariaDB (Community Server) с использованием образа Docker, Java и клиента MariaDB JDBC.

В этом пошаговом руководстве вы будете использовать MariaDB и JDBC для создания простого (на основе Maven ) ” To do” приложение, которое, используя Java Spring , предоставит множество конечных точек для выполнения базовых операций CRUD (создание-чтение-обновление-удаление) над экземпляром базы данных MariaDB.

Давайте начнем!

Требования

Прежде чем перейти к коду, вам нужно убедиться, что у вас есть несколько вещей на вашем компьютере:

Создание нового экземпляра MariaDB с помощью Docker

Один из самых простых способов начать работу с MariaDB, независимо от того, какую операционную систему вы используете, – это извлечь MariaDB Сервер Docker image |/из Docker Hub и используйте его для создания нового контейнера.

Чтобы сделать это, просто откройте окно терминала и выполните следующее:

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

Это оно. Теперь у вас должен быть запущенный экземпляр MariaDB. Довольно безболезненно, не так ли?

Вы можете подтвердить экземпляр в контейнере Docker, выполнив следующее:

$ docker ps

И вы должны увидеть свой контейнер в выходных данных.

Подключение к MariaDB

Теперь, когда у вас есть работающий MariaDB Экземпляр сервера в новом контейнере 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 , который позволит вам создать новый Весна -основанный Maven проект. Для этого проекта вы можете ввести следующие критерии.

Затем добавьте следующие зависимости:

  • Lombok: Библиотека, которая избавит от необходимости создавать шаблонный код (например, геттеры, сеттеры) внутри объектов домена.
  • Весенняя паутина: Библиотека для создания и предоставления конечных точек RESTful API.
  • Spring Data JPA: Библиотека, предоставляющая абстракции, помогающие устранить шаблонный код для подключения к базам данных и взаимодействия с ними.

Наконец, нажмите кнопку “СОЗДАТЬ”, чтобы создать и загрузить проект (содержащийся в zip-файле) в нужное место на вашем компьютере.

Добавьте соединитель ODBC MariaDB R2

Перейдите в папку, в которую вы загрузили новый проект Maven (zip-файл), и распакуйте архив. Затем используйте редактор кода, чтобы открыть проект, и откройте pom.xml .

Добавьте новую зависимость для соединителя Mariadb JDBC в коллекцию зависимостей.

             
   org.mariadb.jdbc           
   mariadb-java-client
   2.6.0

Подготовка к интеграции данных

Теперь, когда вы создали проект, содержащий все необходимые вам зависимости, осталось перейти к Java-коду. Как правило, мне нравится начинать с создания классов сущностей.

Перейдите в/src/main/java/com/mariadb/todo , создайте новую папку с именем “домен” и создайте в ней новый файл с именем “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/to do и создайте в ней новый файл с именем “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 {
}

Как следует из названия, интерфейс CrudRepository предоставляет базовые операции CRUD в репозитории для универсального типа (в данном случае вашего класса задач) и типа первичного ключа для этого универсального типа.

Создание службы передачи данных

Службы можно использовать для управления бизнес-логикой вашего приложения. Единственная служба, Служба задач, в этом приложении используется для проверки объекта задачи и интеграции с TaskRepository.

Создайте новую папку с именем “services” в /src/main/java/com/mariadb/to do и создайте в ней новый файл с именем “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 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 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 ot = this.repository.findById(id);
        Task t = ot.get();
        this.repository.delete(t);
    }
}

Выставлять конечные точки API

Наконец, вам нужно будет создать controller , чтобы предоставить четыре конечные точки, которые можно использовать для выполнения основных операций CRUD в ваших задачах.

Создайте новую папку с именем “контроллеры” в/src/main/java/com/mariadb/для выполнения и создайте в нем новый файл с именем “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> get() {
        return ResponseEntity.ok(this.service.getAllTasks());
    }

    // Create a new task
    @PostMapping()
    public ResponseEntity 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 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 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 }

Вуаля, полностью реактивное приложение Java Spring, использующее JDBC и MariaDB! Чтобы просмотреть этот код полностью, ознакомьтесь с исходным кодом здесь . И если вам интересно, “конечно, было бы неплохо увидеть реализацию с пользовательским интерфейсом”, вам повезло! Вы можете найти полностью развернутую реализацию приложения TODO, используя React.js и ваш выбор из нескольких проектов API/| ((R2 ODBC, JDBC, Node.js и Python), которые напрямую интегрируются с MariaDB здесь !

Только начинаем

Теперь, когда вы успешно создали новый проект Maven с использованием Spring Data JPA, JDBC и MariaDB, у вас есть все необходимые инструменты, чтобы начать создавать собственные полностью реактивные приложения, использующие возможности MariaDB! Если у вас есть какие-либо вопросы, предложения или проблемы с этим сообщением в блоге, пожалуйста, дайте мне знать здесь или свяжитесь со мной напрямую в Twitter по адресу @probablyrealrob ! Спасибо, что нашли время прочитать это, и счастливого кодирования!

Оригинал: “https://dev.to/probablyrealrob/getting-started-with-mariadb-using-docker-java-spring-and-jdbc-2bak”