MariaDB
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> MariaDB

Bắt đầu với MariaDB bằng Docker, Java Spring và JDBC

Kể từ khi được tách ra khỏi MySQL vào năm 2009, MariaDB đã trở thành một trong những cơ sở dữ liệu phổ biến nhất được các nhà phát triển lựa chọn trong thập kỷ qua. Mặc dù nhiều nhà công nghệ có khả năng coi nó như một giải pháp do nguồn gốc nguồn mở của nó và nó bắt nguồn từ thế giới cơ sở dữ liệu quan hệ, nhưng điều đó thực sự chỉ bắt đầu làm xước bề mặt của những gì MariaDB phải cung cấp.

Qua nhiều năm MariaDB đã tách biệt khỏi MySQL bằng cách thêm nhiều tính năng và chức năng, phần lớn trong số đó chúng ta sẽ không thể đi sâu vào trong ngữ cảnh của bài viết này. Tuy nhiên, có một điều, trên tất cả, vẫn không thay đổi; cung cấp giải pháp cơ sở dữ liệu hiện đại, mã nguồn mở, chất lượng cao mà các nhà phát triển có thể sử dụng để thúc đẩy sự đổi mới của họ.

Nhưng trước khi bạn có thể đi sâu vào MariaDB và kiểm tra tất cả những gì nó cung cấp, bạn sẽ cần trả lời những câu hỏi cơ bản nhất; làm thế nào để bạn bắt đầu sử dụng MariaDB?

Kết nối cơ sở dữ liệu MariaDB và Java (JDBC)

Không có gì ngạc nhiên khi Java, và cuối cùng là môi trường Máy ảo Java (JVM) nói chung, là một lựa chọn cực kỳ phổ biến được các nhà phát triển sử dụng để tạo ứng dụng.

Với ý nghĩ đó, tôi đã viết hướng dẫn ngắn này để hướng dẫn bạn qua các bước bắt đầu với MariaDB (Máy chủ cộng đồng) bằng cách sử dụng hình ảnh Docker, Java và ứng dụng khách MariaDB JDBC.

Trong hướng dẫn này, bạn sẽ sử dụng MariaDB và JDBC để tạo một ứng dụng "Việc cần làm" đơn giản (dựa trên Maven), bằng cách sử dụng Java Spring, sẽ hiển thị nhiều điểm cuối khác nhau để sử dụng để thực hiện CRUD cơ bản (tạo-đọc-cập nhật-xoá ) hoạt động trên một cá thể cơ sở dữ liệu MariaDB.

Hãy bắt đầu!

Yêu cầu

Trước khi chuyển sang viết mã, bạn cần đảm bảo rằng mình có một số thứ trên máy:

  • Ứng dụng khách MariaDB
  • Docker
  • Java (v. 8+)
  • Curl (để kiểm tra các điểm cuối API)

Tạo phiên bản MariaDB mới bằng Docker

Một trong những cách đơn giản nhất để bắt đầu với MariaDB, bất kể bạn đang sử dụng hệ điều hành nào, là kéo hình ảnh Docker Máy chủ MariaDB, từ Docker Hub và sử dụng nó để tạo một vùng chứa mới.

Để thực hiện việc này, chỉ cần mở một cửa sổ dòng lệnh và chạy như sau:

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

Đó là nó. Bây giờ bạn sẽ có một phiên bản MariaDB đang chạy. Khá không đau, phải không?

Bạn có thể xác nhận phiên bản trong vùng chứa Docker bằng cách chạy như sau:

$ docker ps

Và bạn sẽ thấy vùng chứa của mình trong đầu ra.

Kết nối với MariaDB

Bây giờ bạn đã có phiên bản Máy chủ MariaDB đang chạy trong vùng chứa Docker mới, bước tiếp theo sẽ là kết nối và giao tiếp với cá thể cơ sở dữ liệu bằng ứng dụng khách MariaDB.

Có rất nhiều máy khách SQL có sẵn trong tự nhiên. Vì mục đích đơn giản, tôi đã chọn trình bày cách sử dụng Ứng dụng khách MariaDB chính thức, nhưng chắc chắn bạn có thể thoải mái sử dụng bất kỳ ứng dụng khách nào bạn thích.

Kết nối với phiên bản MariaDB của bạn bằng cách thực hiện như sau:

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

Bạn sẽ thấy một cái gì đó như sau, có nghĩa là bạn đã kết nối thành công với phiên bản MariaDB!

Sau khi kết nối, bạn có thể tạo một cơ sở dữ liệu mới.

CREATE DATABASE todo;

Sau đó, tạo một bảng mới.

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

Bắt đầu với Java Spring, JDBC và MariaDB

Với một phiên bản cơ sở dữ liệu được tạo ra và lược đồ được tạo, bạn đã sẵn sàng để tạo một ứng dụng Java mới.

Tạo dự án Maven

Bắt đầu bằng cách điều hướng đến https://start.spring.io, điều này sẽ cho phép bạn tạo một dự án Maven dựa trên mùa xuân mới. Đối với dự án này, bạn có thể nhập các tiêu chí sau.

Tiếp theo, thêm các phần phụ thuộc sau:

  • Lombok: Một thư viện sẽ loại bỏ việc phải tạo mã tấm lò hơi (ví dụ:getters, setters) trong các đối tượng miền.
  • Web mùa xuân: Một thư viện để tạo và hiển thị các điểm cuối API RESTful.
  • Dữ liệu mùa xuân JPA: Một thư viện cung cấp các thông tin tóm tắt để giúp loại bỏ mã đĩa lò hơi để kết nối và giao tiếp với cơ sở dữ liệu.

Cuối cùng, nhấp vào nút "GENERATE" để tạo và tải dự án (chứa trong tệp .zip) xuống vị trí mong muốn trên máy của bạn.

Thêm trình kết nối MariaDB R2DBC

Điều hướng đến vị trí mà bạn đã tải xuống dự án Maven mới (tệp .zip) và giải nén. Sau đó, sử dụng trình chỉnh sửa mã để mở dự án và mở pom.xml.

Thêm một phần phụ thuộc mới cho trình kết nối JDBC của MariaDB vào tập hợp các phần phụ thuộc.

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

Chuẩn bị tích hợp dữ liệu

Bây giờ bạn đã tạo một dự án có chứa tất cả các phụ thuộc bạn cần, đó là hãy chuyển sang mã Java. Thông thường, tôi muốn bắt đầu bằng cách tạo các lớp thực thể.

Điều hướng đến / src / main / java / com / mariadb / todo, tạo một thư mục mới có tên "domain" và tạo một tệp mới trong đó có tên "Task.java".

Mở "Task.java" và thêm mã sau.

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

Tiếp theo, tạo một thư mục mới có tên là "kho lưu trữ" trong / src / main / java / com / mariadb / todo và tạo một hồ sơ mới trong đó có tên "TaskRepository.java".

Mở "TaskRepository.java" và thêm mã sau.

package com.mariadb.todo.repositories;

import com.mariadb.todo.domain.Task;

import org.springframework.data.repository.CrudRepository;

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

Giống như tên cho thấy, giao diện CrudRepository cung cấp các thao tác CRUD cơ bản trên kho lưu trữ cho một loại chung (trong trường hợp này là lớp Tác vụ của bạn) và loại khóa chính cho loại chung đó.

Tạo dịch vụ dữ liệu

Các dịch vụ có thể được sử dụng để quản lý logic nghiệp vụ của ứng dụng của bạn. Dịch vụ duy nhất, TaskService, trong ứng dụng này được sử dụng để xác thực đối tượng Task và tích hợp với TaskRepository.

Tạo một thư mục mới có tên "services" trong / src / main / java / com / mariadb / todo và tạo một hồ sơ mới trong đó có tên "TaskService.java".

Mở "TaskService.java" và thêm mã sau.

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

Hiển thị điểm cuối API

Cuối cùng, bạn sẽ cần tạo một bộ điều khiển để hiển thị bốn điểm cuối có thể được sử dụng để thực hiện các hoạt động CRUD cơ bản trong Công việc của bạn.

Tạo một thư mục mới có tên "bộ điều khiển" trong / src / main / java / com / mariadb / todo và tạo một tệp mới trong đó có tên "TaskController.java".

Mở "TaskController.java" và thêm mã sau.

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

Đang thử nghiệm

Bây giờ mọi thứ đã được xây dựng, đã đến lúc kiểm tra nó!

Đầu tiên, xây dựng ứng dụng.

$ mvn package

Và sau đó chạy nó.

$ mvn spring-boot:run

Đầu tiên, hãy bắt đầu bằng cách thêm một nhiệm vụ mới vào danh sách việc cần làm của bạn.

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

Mặc dù bạn chắc chắn có thể truy vấn trực tiếp cơ sở dữ liệu để xác nhận rằng bản ghi nhiệm vụ mới đã được thêm vào, nhưng điều đó thú vị ở chỗ nào? Quay lại API!

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

Nếu mọi việc suôn sẻ, bạn sẽ nhận được phản hồi JSON sau:

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

Voilà, một ứng dụng Java Spring phản ứng hoàn toàn sử dụng JDBC và MariaDB! Để xem toàn bộ mã này, hãy xem nguồn tại đây. Và nếu bạn đang tự hỏi "chắc chắn sẽ rất tuyệt khi thấy một triển khai với giao diện người dùng", thì bạn là người may mắn! Bạn có thể tìm thấy cách triển khai ứng dụng TODO hoàn chỉnh bằng cách sử dụng React.js và sự lựa chọn của bạn về nhiều dự án API
(R2DBC, JDBC, Node.js và Python) tích hợp trực tiếp với MariaDB tại đây!

Chỉ mới bắt đầu

Bây giờ bạn đã tạo thành công một dự án Maven mới bằng cách sử dụng Spring Data JPA, JDBC và MariaDB, bạn có tất cả các công cụ cần thiết để bắt đầu tạo các ứng dụng hoạt động hoàn chỉnh, sử dụng sức mạnh của MariaDB, của riêng bạn! Nếu bạn có bất kỳ câu hỏi nào , các đề xuất hoặc thắc mắc về bài đăng trên blog này, vui lòng cho tôi biết tại đây hoặc liên hệ trực tiếp với tôi trên Twitter tại @problyrealrob! Cảm ơn bạn đã dành thời gian đọc bài viết này và chúc bạn viết mã vui vẻ!


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Trả lại Ngôn ngữ được sử dụng cho các Hàm Ngày &Giờ trong MariaDB

  2. Đặt ngôn ngữ được sử dụng cho các chức năng ngày và giờ trong MariaDB

  3. Hướng dẫn về Chỉ mục MySQL

  4. Cách giám sát vùng chứa MySQL với Prometheus - Triển khai trên độc lập và bầy đàn::Phần một

  5. Cách kết nối các chương trình C ++ với MariaDB