MongoDB Java 예제 자습서에 오신 것을 환영합니다. 이전에는 Unix 기계에 MongoDB를 설치하는 방법과 터미널에서 몇 가지 명령을 실행하는 법을 배웠습니다. 오늘은 MongoDB Java 드라이버의 기능과 일반적인 CRUD (Create, Read, Update, Delete) 작업을 수행하는 방법에 대해 알아보겠습니다.
MongoDB Java
-
MongoDB Java Driver 다운로드
만약 메이븐 프로젝트를 사용하고 있다면, 아래 종속성을 추가하여 MongoDB 자바 드라이버를 애플리케이션에 포함시키세요.
<dependency> <groupId>org.mongodb</groupId> <artifactId>mongo-java-driver</artifactId> <version>2.12.3</version> </dependency>
독립형 프로젝트를 사용하고 있다면, MongoDB 자바 드라이버를 이 링크에서 다운로드하여 프로젝트 빌드 경로에 포함시키세요. 이제 MongoDB 자바 드라이버의 기본 사용법을 알아보고 나서 CRUD 작업에 대한 MongoDB Java 예제 프로그램을 살펴보겠습니다.
-
몽고디비 자바 연결 만들기
MongoClient는 우리의 자바 프로그램과 몽고디비 서버 간의 인터페이스입니다.
MongoClient
는 연결을 생성하고 데이터베이스에 연결하고, 컬렉션 이름을 검색하고, 데이터베이스, 컬렉션, 문서 등을 생성/읽기/업데이트/삭제하는 데 사용됩니다. 몽고디비 자바 드라이버의 기능 중 가장 좋아하는 것 중 하나는 스레드 안전성이라는 점입니다. 따라서MongoClient
의 인스턴스를 한 번 생성하고 재사용할 수 있습니다. 여러 스레드가 동시에 접근하더라도 내부 연결 풀에서 유지하는 연결이 반환됩니다. 데이터베이스에 대한 각 요청(검색, 삽입 등)마다 Java 스레드는 풀에서 연결을 가져와 작업을 실행한 다음 연결을 해제합니다. 이는 사용된 연결(소켓)이 매번 다를 수 있다는 것을 의미합니다. 아래는 몽고디비 서버에 연결하는 일반적인 방법 중 일부입니다.MongoClient mongoClient = new MongoClient(); // 기본 호스트 및 포트에 연결, 즉 127.0.0.1:27017에 연결 // 또는 MongoClient mongoClient = new MongoClient( "localhost" ); // 기본 포트 즉 27017에 연결 // 또는 MongoClient mongoClient = new MongoClient( "localhost" , 27017 ); // 항상 이를 사용해야 함 // 또는, 자동으로 기본을 발견하여 복제 세트에 연결하려면 MongoClient mongoClient = new MongoClient(Arrays.asList(new ServerAddress("localhost", 27017), new ServerAddress("localhost", 27018), new ServerAddress("localhost", 27019)));
-
몽고디비 데이터베이스에 연결하기
몽고디비 서버에 연결한 후, 다음 단계는 아래와 같이 데이터베이스에 연결을 생성하는 것입니다. 데이터베이스가 없는 경우 몽고디비가 자동으로 생성합니다.
MongoClient mongo = new MongoClient("localhost", 27017); DB db = mongo.getDB("journaldev");
MongoClient는 아래와 같이 모든 데이터베이스 이름을 가져오는 유용한 메서드를 제공합니다.
MongoClient mongo = new MongoClient("localhost", 27017); List<String> dbs = mongo.getDatabaseNames(); System.out.println(dbs); // [journaldev, local, admin]
데이터베이스에 사용자 암호 기반 인증을 할 수 있습니다. 이 경우 아래와 같이 인증 자격 증명을 제공해야 합니다.
MongoCredential journaldevAuth = MongoCredential.createPlainCredential("pankaj", "journaldev", "pankaj123".toCharArray()); MongoCredential testAuth = MongoCredential.createPlainCredential("pankaj", "test", "pankaj123".toCharArray()); List<MongoCredential> auths = new ArrayList<MongoCredential>(); auths.add(journaldevAuth); auths.add(testAuth); ServerAddress serverAddress = new ServerAddress("localhost", 27017); MongoClient mongo = new MongoClient(serverAddress, auths);
이전 버전을 사용하는 경우 데이터베이스 객체를 가져온 후에 인증 세부 정보를 제공해야 합니다. 아래와 같이 진행합니다.
MongoClient mongo = new MongoClient("localhost", 27017); DB db = mongo.getDB("journaldev"); boolean auth = db.authenticate("pankaj", "pankaj123".toCharArray());
이전 접근 방식의 결함을 쉽게 확인할 수 있습니다. 인증은 초기 단계에서 수행되어야 하며, 복구할 수 없기 때문입니다. 데이터베이스를 삭제할 때는
MongoClient
의dropDatabase(String db)
메서드 또는DB
의dropDatabase()
메서드를 사용할 수 있습니다. 데이터베이스를 삭제하는 경우 MongoClient 메서드를 선호합니다. -
MongoDB 및 컬렉션
모든 데이터베이스에는 제로 또는 다중 컬렉션이 있을 수 있습니다. 이들은 특정 데이터 형식이 없는 관계형 데이터베이스 서버의 테이블과 유사하지만, 데이터의 특정 형식이 없습니다. 이를 자바 프로그래밍 언어의 일반적인 목록과 문자열 목록으로 생각해보십시오. 아래 코드를 사용하여 모든 컬렉션 이름을 가져올 수 있습니다.
MongoClient mongo = new MongoClient("localhost", 27017); DB db = mongo.getDB("journaldev"); Set<String> collections = db.getCollectionNames(); System.out.println(collections); // [datas, names, system.indexes, users]
아래에 표시된 것처럼 이름을 제공하여 특정 컬렉션을 가져올 수 있습니다.
DB db = mongo.getDB("journaldev"); DBCollection col = db.getCollection("users");
다시 말해, 컬렉션이 존재하지 않으면 MongoDB가 자동으로 생성합니다. MongoDB의 모든 데이터는 어떤 컬렉션에 들어가므로 이 시점에서 삽입/업데이트/삭제 작업을 수행할 준비가 되었습니다. 데이터베이스에서 컬렉션을 삭제하려면
DBCollection
의drop()
메서드를 사용할 수 있습니다. -
몽고디비 자바 예제
Even though we can work on any valid JSON document in MongoDB collection, in real life we have POJO classes that are mapped with these data. So I will create a java bean and use it for my examples. `User.java`
```
package com.journaldev.mongodb.model;
public class User {
private int id;
private String name;
private String role;
private boolean isEmployee;
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getRole() {
return role;
}
public void setRole(String role) {
this.role = role;
}
public boolean isEmployee() {
return isEmployee;
}
public void setEmployee(boolean isEmployee) {
this.isEmployee = isEmployee;
}
}
```
Here is the complete MongoDB java example program showing all the CRUD operations one by one. `MongoDBExample.java`
```
package com.journaldev.mongodb.main;
import java.net.UnknownHostException;
import com.journaldev.mongodb.model.User;
import com.mongodb.BasicDBObjectBuilder;
import com.mongodb.DB;
import com.mongodb.DBCollection;
import com.mongodb.DBCursor;
import com.mongodb.DBObject;
import com.mongodb.MongoClient;
import com.mongodb.WriteResult;
public class MongoDBExample {
public static void main(String[] args) throws UnknownHostException {
User user = createUser();
DBObject doc = createDBObject(user);
MongoClient mongo = new MongoClient("localhost", 27017);
DB db = mongo.getDB("journaldev");
DBCollection col = db.getCollection("users");
//사용자 생성
WriteResult result = col.insert(doc);
System.out.println(result.getUpsertedId());
System.out.println(result.getN());
System.out.println(result.isUpdateOfExisting());
System.out.println(result.getLastConcern());
//예제 읽기
DBObject query = BasicDBObjectBuilder.start().add("_id", user.getId()).get();
DBCursor cursor = col.find(query);
while(cursor.hasNext()){
System.out.println(cursor.next());
}
//예제 업데이트
user.setName("Pankaj Kumar");
doc = createDBObject(user);
result = col.update(query, doc);
System.out.println(result.getUpsertedId());
System.out.println(result.getN());
System.out.println(result.isUpdateOfExisting());
System.out.println(result.getLastConcern());
//예제 삭제
result = col.remove(query);
System.out.println(result.getUpsertedId());
System.out.println(result.getN());
System.out.println(result.isUpdateOfExisting());
System.out.println(result.getLastConcern());
//리소스 닫기
mongo.close();
}
private static DBObject createDBObject(User user) {
BasicDBObjectBuilder docBuilder = BasicDBObjectBuilder.start();
docBuilder.append("_id", user.getId());
docBuilder.append("name", user.getName());
docBuilder.append("role", user.getRole());
docBuilder.append("isEmployee", user.isEmployee());
return docBuilder.get();
}
private static User createUser() {
User u = new User();
u.setId(2);
u.setName("Pankaj");
u.setEmployee(true);
u.setRole("CEO");
return u;
}
}
```
A sample execution results in following output.
```
null
0
false
WriteConcern { "getlasterror" : 1} / (Continue on error? false)
{ "_id" : 2 , "name" : "Pankaj" , "role" : "CEO" , "isEmployee" : true}
null
1
true
WriteConcern { "getlasterror" : 1} / (Continue on error? false)
null
1
false
WriteConcern { "getlasterror" : 1} / (Continue on error? false)
```
Notice that I am saving User id with **\_id** name, this is a reserved key for the primary key of any record in the collection. If we don't provide one, MongoDB will create one for us. It's like sequencer or auto increment column in relational database tables. Since I am deleting the created record, further execution won't cause any issues. But if there are duplicate record, then we will get below errors.
```
Exception in thread "main" com.mongodb.MongoException$DuplicateKey: { "serverUsed" : "localhost:27017" , "ok" : 1 , "n" : 0 ,
"err" : "insertDocument :: caused by :: 11000 E11000 duplicate key error index: journaldev.users.$_id_ dup key: { : 1 }" ,
"code" : 11000}
at com.mongodb.CommandResult.getWriteException(CommandResult.java:88)
at com.mongodb.CommandResult.getException(CommandResult.java:79)
at com.mongodb.DBCollectionImpl.translateBulkWriteException(DBCollectionImpl.java:314)
at com.mongodb.DBCollectionImpl.insert(DBCollectionImpl.java:189)
at com.mongodb.DBCollectionImpl.insert(DBCollectionImpl.java:165)
at com.mongodb.DBCollection.insert(DBCollection.java:93)
at com.mongodb.DBCollection.insert(DBCollection.java:78)
at com.mongodb.DBCollection.insert(DBCollection.java:120)
at com.journaldev.mongodb.main.MongoDBExample.main(MongoDBExample.java:27)
```
몽고디비 자바 드라이버를 시작하는 데 필요한 모든 내용입니다. 다음 게시물에서 더 많은 기능을 살펴보겠습니다.
Source:
https://www.digitalocean.com/community/tutorials/mongodb-java-crud-example-tutorial