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】
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).
testuser @ localhost
Erstellen Sie zum Schluss eine DB (Schema) test_db
mit CREATE DATABASE
usw. und Sie können loslegen.
↓ 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)
LIKE
--Numerische Suche (zur Verwendung des Index)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 X DevAPI
Es gibt verschiedene Funktionen wie.