콘텐츠로 이동

부록 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
컬렉션 삭제 완료