使用Java驅動操作ArangoDB

前面說過怎樣使用 ArangoDB 的 Web,Shell 和 Restful API 來操作數據庫,今天看一下怎樣使用Java語言來操作ArangoDB數據庫。

首先創建一個Maven工程,添加 ArangoDB 的 Java 驅動庫

		<dependency>
			<groupId>com.arangodb</groupId>
			<artifactId>arangodb-java-driver</artifactId>
			<version>6.5.0</version>
		</dependency>

完整的 pom.xml 文件內容如下:

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
		 xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
	<modelVersion>4.0.0</modelVersion>
	<groupId>my.arangodbstudy</groupId>
	<artifactId>arangodbstudy</artifactId>
	<packaging>jar</packaging>
	<version>1.0-SNAPSHOT</version>
	<name>arangodbstudy</name>
	<url>http://maven.apache.org</url>

	<dependencies>
		<dependency>
			<groupId>com.arangodb</groupId>
			<artifactId>arangodb-java-driver</artifactId>
			<version>6.5.0</version>
		</dependency>
		
		<dependency>
			<groupId>junit</groupId>
			<artifactId>junit</artifactId>
			<version>3.8.1</version>
			<scope>test</scope>
		</dependency>
	</dependencies>

	<build>
		<plugins>
			<plugin>
				<groupId>org.apache.maven.plugins</groupId>
				<artifactId>maven-compiler-plugin</artifactId>
				<configuration>
					<source>8</source>
					<target>8</target>
				</configuration>
			</plugin>
		</plugins>
	</build>
</project>

下面寫了一個簡單的 Java 類,其中包含了一些常用的操作,如:創建/關閉連接,數據庫操作,集合操作和文檔操作等。

package my.arangodbstudy;

import com.arangodb.ArangoCollection;
import com.arangodb.ArangoDB;
import com.arangodb.ArangoDatabase;
import com.arangodb.entity.BaseDocument;
import com.arangodb.entity.CollectionEntity;
import com.arangodb.entity.DocumentCreateEntity;

import java.util.Collection;

public class SimpleTest {

	private static final String DB_HOST = "localhost";
	private static final int DB_PORT = 8529;
	private static final String DB_USERNAME = "root";
	private static final String DB_PASSWORD = "<password>";
	private static final String DB_NAME = "mydb";
	private static final String COLLECTION_NAME = "users";

	public static void main(String[] args) {
		// 構造ArangoDB實例
		ArangoDB arangoDB = new ArangoDB.Builder()
				.host(DB_HOST, DB_PORT)
				.user(DB_USERNAME)
				.password(DB_PASSWORD)
				.build();

		// 判斷數據庫存在,如果存在刪除
		if (arangoDB.db(DB_NAME).exists()) {
			arangoDB.db(DB_NAME).drop();
		}

		// 創建數據庫
		arangoDB.createDatabase(DB_NAME);
		System.out.println("arangodb databases: " + arangoDB.getDatabases());

		// 獲取剛纔創建的數據庫
		ArangoDatabase db = arangoDB.db(DB_NAME);

		// 迭代打印數據庫中的集合
		Collection<CollectionEntity> collectionEntities = db.getCollections();
		for (CollectionEntity collectionEntity: collectionEntities) {
			System.out.println(collectionEntity.getName());
		}

		// 創建集合
		CollectionEntity collectionEntity = db.createCollection(COLLECTION_NAME);
		System.out.println("collection name: " + collectionEntity.getName());

		// 獲取創建的集合
		ArangoCollection collection = db.collection(COLLECTION_NAME);

		// 創建文檔對象
		BaseDocument document = new BaseDocument();
		document.addAttribute("name", "user");
		document.addAttribute("age", 10);
		document.addAttribute("sex", 1);

		// 寫入數據
		DocumentCreateEntity documentCreateEntity = collection.insertDocument(document);
		System.out.println("collection count: " + collection.count().getCount());

		// 查詢
		document = collection.getDocument(documentCreateEntity.getKey(), BaseDocument.class);
		System.out.println("document: " + document);

		// 更新文檔
		document.updateAttribute("sex", 0);
		collection.updateDocument(documentCreateEntity.getKey(), document);
		document = collection.getDocument(documentCreateEntity.getKey(), BaseDocument.class);
		System.out.println("document: " + document);

		// 刪除文檔
		collection.deleteDocument(documentCreateEntity.getKey());
		document = collection.getDocument(documentCreateEntity.getKey(), BaseDocument.class);
		System.out.println("document: " + document);

		// 刪除集合
		collection.drop();

		// 刪除數據庫
		db.drop();

		// shutdown ArangoDB
		arangoDB.shutdown();
	}
}

另外,在ArangoDB中,也可以使用AQL來執行一些查詢操作獲取需要的集合,比如:

package my.arangodbstudy;

import com.arangodb.ArangoCollection;
import com.arangodb.ArangoCursor;
import com.arangodb.ArangoDB;
import com.arangodb.ArangoDatabase;
import com.arangodb.entity.BaseDocument;
import com.arangodb.entity.CollectionEntity;
import com.arangodb.entity.DocumentCreateEntity;
import com.arangodb.util.MapBuilder;

import java.util.Collection;
import java.util.Map;

public class SimpleAQLTest {

	private static final String DB_HOST = "localhost";
	private static final int DB_PORT = 8529;
	private static final String DB_USERNAME = "root";
	private static final String DB_PASSWORD = "<password>";
	private static final String DB_NAME = "mydb";
	private static final String COLLECTION_NAME = "users";

	public static void main(String[] args) {
		// 構造ArangoDB實例
		ArangoDB arangoDB = new ArangoDB.Builder()
				.host(DB_HOST, DB_PORT)
				.user(DB_USERNAME)
				.password(DB_PASSWORD)
				.build();

		// 判斷數據庫存在,如果存在刪除
		if (arangoDB.db(DB_NAME).exists()) {
			arangoDB.db(DB_NAME).drop();
		}

		// 創建數據庫
		arangoDB.createDatabase(DB_NAME);
		System.out.println("arangodb databases: " + arangoDB.getDatabases());

		// 獲取剛纔創建的數據庫
		ArangoDatabase db = arangoDB.db(DB_NAME);

		// 創建集合
		CollectionEntity collectionEntity = db.createCollection(COLLECTION_NAME);
		System.out.println("collection name: " + collectionEntity.getName());

		// 獲取創建的集合
		ArangoCollection collection = db.collection(COLLECTION_NAME);

		// 創建文檔對象並寫入
		for (int i = 0; i < 10; i++) {
			BaseDocument document = new BaseDocument();
			document.addAttribute("name", "user_" + i);
			document.addAttribute("age", 10 + i);
			document.addAttribute("sex", 1);
			collection.insertDocument(document);
		}
		System.out.println("collection count: " + collection.count().getCount());

		// 使用AQL查詢文檔
		String query = "FOR user IN " + COLLECTION_NAME +
				" FILTER user.name == @name || user.age >= @age " +
				" RETURN user";
		Map<String, Object> params = new MapBuilder()
				.put("name", "user_0")
				.put("age", 15)
				.get();
		ArangoCursor<BaseDocument> cursor = db.query(query, params, null, BaseDocument.class);
		cursor.forEachRemaining(document -> {
			System.out.println("document: " + document);
		});

		// 刪除集合
		collection.drop();

		// 刪除數據庫
		db.drop();

		// shutdown ArangoDB
		arangoDB.shutdown();
	}
}

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章