2009年にMySQLからフォークされて以来、MariaDBは、過去10年間で開発者に最も人気のあるデータベースの1つになりました。多くの技術者は、そのオープンソースのルーツとリレーショナルデータベースの世界に根ざしているため、ソリューションとしてそれに惹かれている可能性がありますが、実際には、MariaDBが提供するものの表面を傷つけ始めています。
何年にもわたって、MariaDBは多くの機能を追加することでMySQLから分岐してきましたが、その多くはこの記事のコンテキスト内では詳しく説明できません。ただし、何よりも1つは同じままです。開発者がイノベーションを推進するために使用できる、最新のオープンソースの高品質データベースソリューションを提供します。
しかし、MariaDBに飛び込んで、MariaDBが提供するすべてをチェックする前に、最も基本的な質問に答える必要があります。 MariaDBの使用をどのように開始しますか?
MariaDBとJavaDatabaseConnectivity(JDBC)
Java、そして最終的にはJava仮想マシン(JVM)環境全体が、開発者がアプリケーションを作成するために使用する非常に人気のあるオプションであることは、当然のことです。
そのことを念頭に置いて、Dockerイメージ、Java、MariaDB JDBCクライアントを使用してMariaDB(コミュニティサーバー)を使い始めるための手順を説明するために、この短いチュートリアルを作成しました。
このウォークスルーでは、MariaDBとJDBCを利用して、Java Springを使用して基本的なCRUD(create-read-update-delete)を実行するために使用するさまざまなエンドポイントを公開する単純な(Mavenベースの)「Todo」アプリケーションを作成します。 )MariaDBデータベースインスタンスでの操作。
始めましょう!
要件
コードに飛び込む前に、マシンにいくつかのものがあることを確認する必要があります:
- MariaDBクライアント
- Docker
- Java(v。8+)
- Curl(APIエンドポイントのテスト用)
Dockerを使用して新しいMariaDBインスタンスを作成する
使用しているオペレーティングシステムに関係なく、MariaDBを使い始める最も簡単な方法の1つは、Docker HubからMariaDBサーバーのDockerイメージを取得し、それを使用して新しいコンテナーを作成することです。
これを行うには、ターミナルウィンドウを開き、次のコマンドを実行します。
$ docker run -p 3306:3306 -d --name mariadb -eMARIADB_ROOT_PASSWORD=Password123! mariadb/server:10.4
それでおしまい。これで、MariaDBの実行中のインスタンスができました。かなり痛みはありませんよね?
次のコマンドを実行して、Dockerコンテナ内のインスタンスを確認できます。
$ docker ps
そして、出力内にコンテナが表示されるはずです。
MariaDBへの接続
新しいDockerコンテナ内で実行中のMariaDBサーバーインスタンスができたので、次のステップは、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プロジェクトを作成できます。このプロジェクトでは、次の基準を入力できます。
次に、次の依存関係を追加します。
- ロンボク: ドメインオブジェクト内にボイラープレートコード(ゲッター、セッターなど)を作成する必要をなくすライブラリ。
- 春のウェブ: RESTfulAPIエンドポイントを作成および公開するためのライブラリ。
- Spring Data JPA: データベースに接続して通信するためのボイラープレートコードを排除するのに役立つ抽象化を提供するライブラリ。
最後に、[生成]ボタンをクリックして、プロジェクト(.zipファイルに含まれている)を作成し、マシン上の目的の場所にダウンロードします。
MariaDBR2DBCコネクタを追加します
新しいMavenプロジェクト(.zipファイル)をダウンロードした場所に移動し、解凍します。次に、コードエディタを使用してプロジェクトを開き、pom.xmlを開きます。
MariaDBのJDBCコネクタの新しい依存関係を依存関係のコレクションに追加します。
<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に「repositories」という新しいフォルダを作成します。 、およびその中に「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操作を提供します。
データサービスを作成する
サービスを使用して、アプリケーションのビジネスロジックを管理できます。このアプリケーションの唯一のサービスであるTaskServiceは、Taskオブジェクトの検証とTaskRepositoryとの統合に使用されます。
/ src / main / java / com / mariadb / todoに「services」という名前の新しいフォルダを作成します 、およびその中に「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操作を実行するために使用できる4つのエンドポイントを公開するコントローラーを作成する必要があります。
/src/main/java/com/mariadb/todoに「controllers」という名前の新しいフォルダを作成し、その中に「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à、JDBCとMariaDBを使用した完全にリアクティブなJava Springアプリケーション!このコード全体を表示するには、こちらのソースを確認してください。そして、「ユーザーインターフェイスを備えた実装を見るのは間違いないだろう」と思っているなら、幸運です! React.jsと複数のAPIプロジェクトの選択を使用して、TODOアプリケーションの完全に具体化された実装を見つけることができます
(R2DBC、JDBC、Node.js、Python)ここでMariaDBと直接統合します!
始めたばかり
Spring Data JPA、JDBC、MariaDBを使用して新しいMavenプロジェクトを正常に作成したので、MariaDBの機能を利用して、完全にリアクティブなアプリケーションの作成を開始するために必要なすべてのツールを手に入れました。ご不明な点がございましたら、 、このブログ投稿に関する提案や懸念事項については、こちらからお知らせいただくか、Twitter(@probablyrealrob)で直接ご連絡ください。時間を割いてこのコーディングをお読みいただき、ありがとうございます。