[JAVA] Versuchen Sie, die Dokumentendatenbank mit X DevAPI mit MySQL Connector / J 8.0.15 zu betreiben

In MySQL 8.0

--JSON Funktion

Es kann auch als Dokumentendatenbank (Dokumentenspeicher) verwendet werden, daher habe ich versucht, MySQL Connector / J in einer Java (8) -Umgebung zu verwenden, obwohl es spät war.


【Referenz】


Vorbereitung

Installieren Sie Folgendes auf demselben Computer (entweder ein Windows-PC oder eine virtuelle Linux-Maschine ist in Ordnung).

Registrieren Sie als Nächstes einen Testbenutzer auf dem MySQL (Community) Server (OK über die Befehlszeile oder über die MySQL Workbench).

Erstellen Sie zum Schluss eine DB (Schema) test_db mit CREATE DATABASE usw. und Sie können loslegen.

Beschreibung des Testcodes

↓ ist ein Testcode für die einfache Dokumentenverarbeitung.

Testcode


package site.hmatsu47.DocDbTest;

import java.util.List;

import com.mysql.cj.xdevapi.Collection;
import com.mysql.cj.xdevapi.DbDoc;
import com.mysql.cj.xdevapi.DocResult;
import com.mysql.cj.xdevapi.Schema;
import com.mysql.cj.xdevapi.Session;
import com.mysql.cj.xdevapi.SessionFactory;


public class Main {

	public static void main(String args[]) {
		//Verbinden zum Server
		Session session = new SessionFactory().getSession("mysqlx://localhost:33060/test_db?user=testuser&password=T35_U53r");

		//Stellen Sie eine Verbindung zur Datenbank her
		Schema db = session.getSchema("test_db");

		//Sammlung'test_collection'Erstellen
		Collection col = db.createCollection("test_collection", true);

		//Dokument zur Sammlung hinzufügen
		col.add("{\"id\":1, \"name\":\"Sakuraba\", \"Program\":\"Java Champion\"}")
		        .execute();
		col.add("{\"id\":2, \"name\":\"Gut\", \"Program\":\"Oracle ACE\"}")
		        .execute();
		col.add("{\"id\":3, \"name\":\"Sero\", \"Program\":[\"Java Champion\",\"Oracle Groundbreaker Ambassador\"]}")
		        .execute();
		col.add("{\"id\":4, \"name\":\"Tomita\", \"Program\":\"Oracle ACE Associate\"}")
		        .execute();
		col.add("{\"id\":5, \"name\":\"Mitani\", \"Program\":\"Oracle ACE\"}")
		        .execute();

		//Es hat nichts mit dem Hauptthema zu tun, aber ich kann Jukucho nicht in der DB von Oracle ACE, Groundbreaker und Java Champion finden ...

		//Index zur Spalte "id" der Sammlung hinzufügen
		col.createIndex("id_index", "{\"fields\": [{\"field\": \"$.id\", \"type\": \"INT\"}]}");

		//Aus der Sammlung "Programm LIKE'%Oracle%'Suchen und anzeigen
		searchProgram(col, "Oracle");

		System.out.println();

		//Aus der Sammlung "Programm LIKE'%Java%'Suchen und anzeigen
		searchProgram(col, "Java");

		System.out.println();

		//Aus der Sammlung "id=2 ”und Anzeige
		searchId(col, 2);

		System.out.println();

		//Aus der Sammlung "id=4 ”und Anzeige
		searchId(col, 4);

		//Sammlung löschen
		db.dropCollection("test_collection");
	}

	//Suchen Sie nach "Programm" des Zieldokuments aus der Sammlung und zeigen Sie es an
	private static void searchProgram(Collection col, String keyword) {

		System.out.println("Search: " + keyword);
		DocResult docs = col.find("Program like :program")
		        .bind("program", "%" + keyword + "%").execute();

		//Ergebnisse abrufen und anzeigen
		List<DbDoc> docl = docs.fetchAll();
		docl.forEach(doc -> System.out.println(doc.toFormattedString()));
	}

	//Suchen Sie numerisch die "ID" des Zieldokuments aus der Sammlung und zeigen Sie sie an
	private static void searchId(Collection col, long value) {

		System.out.println("Search: " + value);
		DocResult docs = col.find("id = :id")
		        .bind("id", value).execute();

		//Ergebnisse abrufen und anzeigen
		System.out.println(docs.fetchOne().toFormattedString());
	}
}

Stellen Sie eine Verbindung zum DB-Server her, indem Sie "URL" als Argument mit "new SessionFactory (). GetSession ()" angeben, und stellen Sie eine Verbindung zur DB her, indem Sie den Namen des Schemas (DB) als Argument mit "session.getSchema ()" angeben. Ich bin.

Wie der Name schon sagt, ist "URL" "URL". Wenn Sie also ein Symbol in Ihrem Passwort verwenden, maskieren Sie es entsprechend (ich habe versehentlich einen Fehler gemacht und mir eine Stunde lang Sorgen gemacht).

Dann in Ordnung

--Erstellen Sie eine neue Dokumentensammlung (wenn derselbe Name bereits vorhanden ist, verwenden Sie ihn so wie er ist)

Ich mache.

Wie Sie sehen können, zeigt die Zeichenfolge "LIKE" -Suche, dass die Suche auch dann korrekt ist, wenn ein Dokument mehrere Elemente mit demselben Namen enthält.

Wenn man das Tabellendesign während der Ausführung betrachtet, sieht es so aus (SHOW CREATE TABLE test_db.test_collection;)

test_Sammlung Tisch Design


CREATE TABLE `test_collection` (
  `doc` json DEFAULT NULL,
  `_id` varbinary(32) GENERATED ALWAYS AS (json_unquote(json_extract(`doc`,_utf8mb4'$._id'))) STORED NOT NULL,
  `$ix_i_C6EF652A87142734264FBA60F41C59108CF4D8CA` int(11) GENERATED ALWAYS AS (json_extract(`doc`,_utf8mb4'$.id')) VIRTUAL,
  PRIMARY KEY (`_id`),
  KEY `id_index` (`$ix_i_C6EF652A87142734264FBA60F41C59108CF4D8CA`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci

Auch das Ausführungsergebnis wird so sein.

Ausführungsergebnis


Search: Oracle
{
"Program" : "Oracle ACE",
"_id" : "00005c8ded80000000000000006b",
"id" : 2,
"name" : "Gut"
}
{
"Program" : ["Java Champion", "Oracle Groundbreaker Ambassador"],
"_id" : "00005c8ded80000000000000006c",
"id" : 3,
"name" : "Sero"
}
{
"Program" : "Oracle ACE Associate",
"_id" : "00005c8ded80000000000000006d",
"id" : 4,
"name" : "Tomita"
}
{
"Program" : "Oracle ACE",
"_id" : "00005c8ded80000000000000006e",
"id" : 5,
"name" : "Mitani"
}

Search: Java
{
"Program" : "Java Champion",
"_id" : "00005c8ded80000000000000006a",
"id" : 1,
"name" : "Sakuraba"
}
{
"Program" : ["Java Champion", "Oracle Groundbreaker Ambassador"],
"_id" : "00005c8ded80000000000000006c",
"id" : 3,
"name" : "Sero"
}

Search: 2
{
"Program" : "Oracle ACE",
"_id" : "00005c8ded80000000000000006b",
"id" : 2,
"name" : "Gut"
}

Search: 4
{
"Program" : "Oracle ACE Associate",
"_id" : "00005c8ded80000000000000006d",
"id" : 4,
"name" : "Tomita"
}

Andere

Andere X DevAPI

Es gibt verschiedene Funktionen wie.


Recommended Posts

Versuchen Sie, die Dokumentendatenbank mit X DevAPI mit MySQL Connector / J 8.0.15 zu betreiben
Benchen durch Ändern der Eigenschaften mit MySQL Connector / J Teil 1: Batch
Versuchen Sie es mit GloVe mit Deeplearning4j
JDBC-Verbindung mit MySQL 8.x * Hinweise *
Versuchen Sie es mit Redis mit Java (jar)
[Trainieren! ] Java-Datenbankverknüpfung (Connector / J 8.0.20)
Benchmark durch Ändern der Eigenschaften mit MySQL Connector / J Teil 2: Stoppen Sie unnötige Gespräche
Benchen durch Ändern der Eigenschaften mit MySQL Connector / J Teil 3: Vorbereiteter Anweisungscache
Interaktion mit einer MySQL-Datenbank mithilfe der ORM-Funktion (Object-Relational Mapping) von Apache Cayenne