Docs Menu
Docs Home
/ /
데이터 형식

문서 데이터 형식: POJO

이 가이드에서는 일반적인 이전 Java 객체 또는 POJO로 모델링된 데이터를 저장하고 검색하는 방법을 알아봅니다. POJO는 데이터 캡슐화에 자주 사용되며, 이는 데이터 표현에서 비즈니스 논리를 분리하는 방법입니다.

이 가이드의 예시에서는 다음 작업을 수행하는 방법을 알아봅니다.

  • POJO 직렬화 및 역직렬화를 위한 드라이버 구성

  • POJO로 모델링된 데이터를 사용하는 CRUD 작업 수행

이 가이드의 섹션에서는 꽃의 특성을 설명하는 다음 샘플 POJO 클래스를 사용합니다.

public class Flower {
private ObjectId id;
private String name;
private List<String> colors;
private Boolean isBlooming;
private Float height;
// public empty constructor needed for retrieving the POJO
public Flower() {
}
public Flower(String name, Boolean isBlooming, Float height, List<String> colors) {
this.name = name;
this.isBlooming = isBlooming;
this.height = height;
this.colors = colors;
}
public ObjectId getId() {
return id;
}
public void setId(ObjectId id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public Boolean getIsBlooming() {
return isBlooming;
}
public void setIsBlooming(Boolean isBlooming) {
this.isBlooming = isBlooming;
}
public Float getHeight() {
return height;
}
public void setHeight(Float height) {
this.height = height;
}
public List<String> getColors() {
return colors;
}
public void setColors(List<String> colors) {
this.colors = colors;
}
@Override
public String toString() {
return "\nFlower {\n\tid: " + id + "\n\tname: " + name + "\n\tcolors: " + colors + "\n\tisBlooming: " + isBlooming + "\n\theight: " + height + "\n}";
}
}

MongoDB 내에서 데이터를 저장하고 검색하기 위해 POJO를 정의할 때는 다음 지침을 .

  • POJO 클래스는 프레임워크에서 클래스를 확장하거나 인터페이스를 구현할 수 없습니다.

  • 데이터를 저장 및 검색하려는 모든 필드를 포함하고 static 또는 transient(으)로 표시되지 않았는지 확인하세요.

  • POJO에 JavaBean 명명 규칙 을 사용하여 공용 게터 또는 세터 메서드를 포함하면 드라이버가 데이터를 직렬화하거나 역직렬화할 때 해당 메서드를 호출합니다. 공용 속성 필드에 대한 getter 또는 setter 메서드를 생략하면 드라이버가 해당 메서드에 직접 액세스하거나 할당합니다.

POJO를 사용하도록 드라이버를 구성하려면 다음 구성 요소를 지정해야 합니다:

  • PojoCodecProvider 인스턴스 에는 POJO 형식과 BSON 간의 데이터 인코딩 및 디코딩 방법을 정의하는 코덱 이 있습니다. 또한 제공자 는 코덱 적용 되는 POJO 클래스 또는 패키지를 지정합니다.

  • CodecRegistry 코덱 및 기타 관련 정보가 포함된 인스턴스

  • MongoDatabase 또는 CodecRegistry 을(를) 사용하도록 구성된 MongoCollection 인스턴스

  • MongoCollection 일반 유형에 바인딩된 POJO 문서 클래스로 생성된 TDocument 인스턴스

이전 섹션에 정의된 구성 요구 사항을 충족하려면 다음 단계를 수행하세요.

  1. PojoCodecProvider을(를) 구성합니다. 이 예시에서는 PojoCodecProvider.Builderautomatic(true) 설정을 사용하여 모든 클래스 및 해당 속성에 코덱을 적용합니다.

    CodecProvider pojoCodecProvider = PojoCodecProvider.builder().automatic(true).build();

    참고

    코덱 제공자에는 직렬화 동작을 추가로 정의하는 ClassModelConvention 인스턴스와 같은 다른 객체도 포함되어 있습니다. 코덱 제공자 및 사용자 지정에 대한 자세한 내용은 POJO 사용자 지정 가이드를 참조하세요.

  2. CodecRegistryPojoCodecProvider 인스턴스를 추가합니다. CodecRegistry를 사용하면 하나 이상의 코덱 공급자를 지정하여 POJO 데이터를 인코딩할 수 있습니다. 이 예시에서는 다음 메서드를 호출합니다:

    • fromRegistries() 여러 CodecRegistry 인스턴스를 하나의 인스턴스로 결합하는 방법

    • getDefaultCodecRegistry() 코덱 공급자 목록에서 CodecRegistry 인스턴스 검색

    • fromProviders() PojoCodecProvider에서 CodecRegistry 인스턴스 생성

    다음 코드는 CodecRegistry을(를) 인스턴스화하는 방법입니다.

    // Include the following static imports before your class definition
    import static com.mongodb.MongoClientSettings.getDefaultCodecRegistry;
    import static org.bson.codecs.configuration.CodecRegistries.fromProviders;
    import static org.bson.codecs.configuration.CodecRegistries.fromRegistries;
    ...
    CodecRegistry pojoCodecRegistry = fromRegistries(getDefaultCodecRegistry(), fromProviders(pojoCodecProvider));
  3. CodecRegistry에서 코덱을 사용하도록 MongoDatabase 또는 MongoCollection 인스턴스를 구성합니다. 코덱을 지정하기 위해 데이터베이스나 컬렉션을 구성할 수 있습니다.

    이 예시에서는 withCodecRegistry() 메서드를 사용하여 sample_pojos (이)라는 MongoDatabaseCodecRegistry을(를) 설정합니다.

    MongoClient mongoClient = MongoClients.create(uri);
    MongoDatabase database = mongoClient.getDatabase("sample_pojos").withCodecRegistry(pojoCodecRegistry);
  4. POJO 클래스를 getCollection() 호출에 문서 클래스 매개변수로 전달하고 다음과 같이 MongoCollection 인스턴스의 유형 인수로 지정합니다.

    MongoCollection<Flower> collection = database.getCollection("flowers", Flower.class);

Flower POJO를 사용하도록 MongoCollection 인스턴스를 구성한 후에는 POJO로 모델링된 데이터에 대해 CRUD 작업을 수행할 수 있습니다.

이 예시에서는 Flower POJO를 사용하여 다음 작업을 수행하는 방법을 알아봅니다.

  • flowers 컬렉션에 Flower의 인스턴스를 삽입합니다.

  • 컬렉션 문서 업데이트

  • 컬렉션에서 문서 삭제

  • 컬렉션에 있는 모든 문서 찾기 및 인쇄

// Insert three Flower instances
Flower roseFlower = new Flower("rose", false, 25.4f, Arrays.asList(new String[] {"red", "pink"}));
Flower daisyFlower = new Flower("daisy", true, 21.1f, Arrays.asList(new String[] {"purple", "white"}));
Flower peonyFlower = new Flower("peony", false, 19.2f, Arrays.asList(new String[] {"red", "green"}));
collection.insertMany(Arrays.asList(roseFlower, daisyFlower, peonyFlower));
// Update a document
collection.updateOne(
Filters.lte("height", 22),
Updates.addToSet("colors", "pink")
);
// Delete a document
collection.deleteOne(Filters.eq("name", "rose"));
// Return and print all documents in the collection
List<Flower> flowers = new ArrayList<>();
collection.find().into(flowers);
System.out.println(flowers);

이 예시에서는 다음 출력을 표시합니다.

[
Flower {
id: 65b178ffa38ac42044ca1573
name: daisy
colors: [purple, white, pink]
isBlooming: true
height: 21.1
},
Flower {
id: 65b178ffa38ac42044ca1574
name: peony
colors: [red, green]
isBlooming: false
height: 19.2
}]

참고

기본적으로 PojoCodecProvider 는 POJO에서 null 로 설정된 필드를 생략합니다. 이 동작을 지정하는 방법에 대한 자세한 내용은 POJO 사용자 지정 가이드를 참조하세요.

이 섹션에 언급된 메서드 및 클래스에 대한 자세한 내용은 다음 API 문서를 참조하세요.

이 가이드에서는 다음 작업을 수행하여 BSON과 POJO 형식 간에 데이터를 변환하는 방법을 설명합니다.

  • BSON과 POJO 필드 간에 데이터를 인코딩 및 디코딩하는 방법을 정의하는 코덱이 포함된 PojoCodecProvider을(를) 인스턴스화합니다.

  • Codecs을 모든 클래스 및 해당 클래스의 속성에 적용하려면 PojoCodecProvider에 대한 자동 변환 동작을 지정하세요.

  • PojoCodecProviderCodecRegistry에 추가하고 MongoDatabase 또는 MongoCollection의 인스턴스에서 레지스트리를 지정합니다.

  • 샘플 POJO 클래스를 사용하는 CRUD 작업을 수행합니다.

돌아가기

문서

이 페이지의 내용