부록 A. 전체 예제#
도서 관리 시스템 예제#
package com.example;
import static com.altibase.document.api.Filters.*;
import com.altibase.document.api.AltibaseClient;
import com.altibase.document.api.AltibaseCollection;
import com.altibase.document.api.AltibaseDatabase;
import com.altibase.document.api.AltibaseDocument;
import com.altibase.document.api.DocResult;
import com.altibase.document.api.InsertResult;
import com.altibase.document.api.JsonColumnType;
import com.altibase.document.api.KeyColumnType;
import com.altibase.document.api.KeyGenerationType;
import com.altibase.document.api.UpdateResult;
import com.altibase.document.util.CollectionOptionsBuilder;
import java.util.Arrays;
import java.util.List;
import java.util.Properties;
public class BookManagementExample {
public static void main(String[] args) {
Properties props = new Properties();
props.put("user", "kuser");
props.put("password", "manager");
String url = "jdbc:Altibase://localhost:20300/mydb";
try (AltibaseDatabase db = AltibaseClient.getDatabase(url, props)) {
// 1. 컬렉션 생성
AltibaseDocument options = new CollectionOptionsBuilder()
.jsonColumnType(JsonColumnType.VARCHAR)
.keyColumn()
.name("_ID")
.type(KeyColumnType.VARCHAR)
.size(40)
.generationType(KeyGenerationType.UUID)
.endKeyColumn()
.build();
AltibaseCollection books = db.createCollection("books", options);
System.out.println("컬렉션 생성 완료: " + books.getName());
// 2. 도서 데이터 삽입
List<AltibaseDocument> bookDocs = Arrays.asList(
books.createDocument("{\"title\": \"1984\", \"author\": \"George Orwell\", \"year\": 1949, \"genre\": \"dystopia\", \"price\": 15000}"),
books.createDocument("{\"title\": \"동물농장\", \"author\": \"George Orwell\", \"year\": 1945, \"genre\": \"satire\", \"price\": 12000}"),
books.createDocument("{\"title\": \"해리포터와 마법사의 돌\", \"author\": \"J.K. Rowling\", \"year\": 1997, \"genre\": \"fantasy\", \"price\": 18000}"),
books.createDocument("{\"title\": \"반지의 제왕\", \"author\": \"J.R.R. Tolkien\", \"year\": 1954, \"genre\": \"fantasy\", \"price\": 25000}"),
books.createDocument("{\"title\": \"데미안\", \"author\": \"Hermann Hesse\", \"year\": 1919, \"genre\": \"bildungsroman\", \"price\": 13000}")
);
List<InsertResult> insertResults = books.insertMany(bookDocs);
System.out.println("삽입된 도서 수: " + insertResults.size());
// 3. 전체 도서 조회
System.out.println("\n=== 전체 도서 목록 ===");
try (DocResult all = books.find().execute()) {
for (AltibaseDocument doc : all) {
System.out.println(doc.getString("title") + " - " + doc.getString("author"));
}
}
// 4. 조건 조회: 판타지 장르
System.out.println("\n=== 판타지 장르 ===");
try (DocResult fantasy = books.findByCond(eq("genre", "fantasy")).execute()) {
for (AltibaseDocument doc : fantasy) {
System.out.println(doc.getString("title"));
}
}
// 5. 복합 조건: 가격 15000원 이상, 출판년도 순 정렬
System.out.println("\n=== 가격 15000원 이상 (출판년도 순) ===");
AltibaseDocument filter = gte("price", 15000);
AltibaseDocument sort = AltibaseDocument.parse("{\"year\": 1}");
try (DocResult expensive = books.findByCond(filter).sort(sort).execute()) {
for (AltibaseDocument doc : expensive) {
System.out.printf("%s (%d) - %d원%n",
doc.getString("title"),
doc.getInteger("year"),
doc.getInteger("price"));
}
}
// 6. 문서 수정: 첫 번째 도서 가격 변경
String firstKey = insertResults.get(0).getStringKey();
AltibaseDocument updatedBook = books.createDocument(
"{\"title\": \"1984\", \"author\": \"George Orwell\", \"year\": 1949, \"genre\": \"dystopia\", \"price\": 16000}"
);
UpdateResult updateResult = books.replaceOne(firstKey, updatedBook);
System.out.println("\n수정된 문서 수: " + updateResult.getAffectedDocCount());
// 7. 문서 삭제: 1950년 이전 출판된 도서
AltibaseDocument deleteFilter = lt("year", 1950);
UpdateResult deleteResult = books.deleteMany(deleteFilter);
System.out.println("삭제된 문서 수: " + deleteResult.getAffectedDocCount());
// 8. 최종 문서 수 확인
long finalCount = books.countDocuments();
System.out.println("\n최종 도서 수: " + finalCount);
// 9. 컬렉션 삭제
db.dropCollection("books");
System.out.println("컬렉션 삭제 완료");
} catch (Exception e) {
e.printStackTrace();
}
}
}
실행 결과
컬렉션 생성 완료: books
삽입된 도서 수: 5
=== 전체 도서 목록 ===
1984 - George Orwell
동물농장 - George Orwell
해리포터와 마법사의 돌 - J.K. Rowling
반지의 제왕 - J.R.R. Tolkien
데미안 - Hermann Hesse
=== 판타지 장르 ===
해리포터와 마법사의 돌
반지의 제왕
=== 가격 15000원 이상 (출판년도 순) ===
반지의 제왕 (1954) - 25000원
해리포터와 마법사의 돌 (1997) - 18000원
1984 (1949) - 15000원
수정된 문서 수: 1
삭제된 문서 수: 3
최종 도서 수: 2
컬렉션 삭제 완료