② BuguMongo---대상-문서 맵

2.대상-문서 맵
대상(Object,실체 Entity 라 고도 함),문서(Document)간 에 자동 전환 을 실현 하 는 것 은 BuguMongo 의 가장 핵심 적 인 기능 으로 대상 을 대상 으로 하 는 개념 으로 MongoDB 데이터 베 이 스 를 직접 조작 할 수 있 으 며 바 텀 데이터 베이스 디 테 일 에 관심 을 가지 지 않 아 도 된다.
이 방면 에서 BuguMongo 는 다음 과 같이 제공 했다.
8 개의 주석:@Entity,@Id,@Property,@Embed,@EmbedList,@Ref,@RefList,@Ignore
1 개의 인터페이스:BuguEntity
1 개의 추상 클래스:Simple Entity
BuguEntity 인터페이스
어떤 자바 엔 터 티 가 MongoDB Document 와 상호 전환 할 수 있 도록 하려 면 이 엔 터 티 는 BuguEntity 인 터 페 이 스 를 실현 해 야 합 니 다.이 인터페이스 에는 두 가지 방법 이 있 습 니 다.다음 과 같 습 니 다.
publicvoid setId(String id);
    
publicString getId();

주해
먼저 예시 코드 를 보십시오.
import com.bugull.mongo.BuguEntity;
import com.bugull.mongo.annotations.Entity;
import com.bugull.mongo.annotations.Id;
import com.bugull.mongo.annotations.IdType;
import com.bugull.mongo.annotations.Property;
import com.bugull.mongo.annotations.Embed;
import com.bugull.mongo.annotations.EmbedList;
import com.bugull.mongo.annotations.Ref;
import com.bugull.mongo.annotations.RefList;
import java.util.List;
@Entity
public class Foo implements BuguEntity{
    @Id
    private String id;
    private String name;
    @Property
    private int level;
    @Embed
    private EmbedFoo embed;
    @EmbedList
    private List<EmbedFoo> embedList;
    @Ref
    private FatherFoo father;
    @RefList
    private List<ChildFoo> children;
    @Ignore
    private double sumScore;

    @Override
    public String getId(){
        return id;
    }

    @Override
    public void setId(String id){
        this.id = id;
    }

    ...other getter and setter...
}
public class EmbedFoo{
    private float x;
    private int y;
    ...getter and setter
}
@Entity(name="father")
public class FatherFoo implements BuguEntity{
    @Id(type=IdType.AUTO_INCREASE, start=1000)
    private String id;
    private Date date;
    @Ref
    private FatherFoo father;
    ...getter and setter...
}
@Entity(name="child")
public class ChildFoo implements BuguEntity{
    @Id
    private String id;
    private List<String> list;
    ...getter and setter...
}

각 주해 의 의 미 는 다음 과 같다.
@Entity
MongoDB 에 비 춰 야 할 실 체 를 표시 합 니 다.이 주 해 는 4 개의 속성 이 있 습 니 다:
name-String 형 은 MongoDB 에 있 는 collection 의 이름 을 표시 합 니 다.name 속성 은 생략 할 수 있 습 니 다.기본적으로 클래스 이름 의 전체 소문 자 를 사용 합 니 다.
capped-boolean 형 은 이 Entity 류 가 Capped Collection 에 대응 하고 결 성 된 값 은 false 임 을 나타 낸다.
capSize-long 형,Capped Collection 의 공간 크기 를 설정 하고 바이트 단위 로 기본 값 은-1 로 설정 되 지 않 았 음 을 표시 합 니 다.
capMax-long 형,Capped Collection 의 최대 몇 개의 document 를 저장 할 수 있 는 지 설정 합 니 다.기본 값 은-1 로 설정 되 지 않 았 음 을 표시 합 니 다.
capped=true 를 설정 하면 capSize 와 capMax 둘 중 하 나 를 설정 해 야 합 니 다.
알림:@Entity 주 해 를 사용 하 는 클래스 는 BuguEntity 인 터 페 이 스 를 실현 해 야 합 니 다.
@Id
MongoDB 에 비 친id。@Id 속성 은 자바 코드 에서 String 형식 이 어야 하지만 MongoDB 에 있 는 데이터 형식 은@Id 의 type 속성 설정 에 따라 결 정 됩 니 다.
@Id 의 type 속성,다음 세 개의 매 거 진 값 이 있 습 니 다:
IdType.AUTO_GENERATE-기본 값.MongoDB 에서 id 값 이 자동 으로 생 성 됨 을 나타 낸다.MongoDB 에서 id 는 ObjectId 대상 으로 저 장 됩 니 다.형식 은 다음 과 같 습 니 다."id" : ObjectId("4eb8beeaeaad0a390144f084")。
IdType.AUTO_INCREASE-id 값 이 자동 으로 증가 함 을 나타 낸다.예 를 들 어 1,2,3,4...MongoDB 에 서 는 id 가 Long 형식의 수치 로 저 장 됩 니 다.
IdType.USER_DEFINE-id 값 은 프로그래머 가 정의 합 니 다.예 를 들 어 String id=UUID.randomUUID().toString();MongoDB 에서 id 는 문자열 로 저 장 됩 니 다.
type=IdType.AUTO 를 사용 하면INCREASE,그러면 start 인 자 를 설정 하여 id 가 지정 한 값 부터 증가 하도록 할 수 있 습 니 다.
하나의 예 는 다음 과 같다.
@Id(type=IdType.AUTO_INCREASE, start=1000)
private String id;

@Property
이 주 해 는 생략 할 수 있다.이 는 String,int,long,short,byte,float,double,boolean,char,Date,Timestamp 등 기본 데이터 형식 으로 구 성 된 배열,List,Set,Map 을 포함 하여 기본 데이터 형식 을 매 핑 하 는 데 사 용 됩 니 다.
@Property 는 2 개의 속성 이 있 습 니 다:
name-String 형,MongoDB collection 에 비 치 는 field 를 지정 합 니 다.속성 name 은 Entity 의 Field 와 같은 이름 을 사용 하 는 것 을 생략 할 수 있 습 니 다.
lazy-Boolean 형,이 실체의 목록 을 꺼 낼 때 이 field 값 을 꺼 낼 지 여부 입 니 다.true 라면 꺼 내지 않 겠 다 는 뜻 입 니 다.기본 값 은 false 입 니 다.
lazy 속성 에 대한 상세 한 설명,확인 하 세 요lazy 와 캐 스 케 이 드 속성
@Ignore
이 속성 은 매 핑 되 지 않 아 도 된다 는 뜻 입 니 다.실 체 를 저장 할 때 이 속성 은 MongoDB 에 저장 되 지 않 습 니 다.마찬가지 로 이 속성 도 MongoDB 에서 꺼 내지 않 는 다.
@Embed
이 속성 은 끼 워 넣 은 대상 임 을 나타 낸다.끼 워 넣 기 대상(예 를 들 어 EmbedFoo)은 일반적인 POJO 일 뿐@Entity 주석 이 필요 없고 BuguEntity 인 터 페 이 스 를 실현 할 필요 도 없고@Id 도 필요 하지 않 습 니 다.
@Property 와 마찬가지 로@Embed 도 두 가지 속성 이 있 습 니 다.name,lazy,의미 도 같 습 니 다.
대상 의 속성 을 삽입 하면 점 번호"."로 참조 할 수 있 습 니 다.예 를 들 어 조회:
FooDao dao =...
List list = dao.query().is("embed.x",3.14F).results();  
//     embed.x=3.14 Foo  

@EmbedList
이 속성 은 끼 워 넣 은 대상 임 을 나타 낸다.
@EmbedList 주 해 는 배열,List,Set,Map,Queue 를 지원 하지만 모두 범 형 을 사용 해 야 합 니 다.맵 을 사용 할 때 끼 워 넣 은 대상 은 맵 의 value 일 뿐 키 일 수 없습니다.
메모:Embed 와 마찬가지 로 끼 워 넣 은 대상 은 모두 자신 이 정의 한 자바 대상 이 어야 합 니 다.원본 데이터 형식 으로 구 성 된 List,Set,Map 등 이 라면@EmbedList 가 아 닌@Property 를 사용 하 십시오.
@Property 와 마찬가지 로@EmbedList 도 두 가지 속성 이 있 습 니 다.name,lazy,의미 도 같 습 니 다.
@Ref
다른 대상 에 대한 인용 을 표시 합 니 다.MongoDB 에 저 장 된 것 은"father":{"$ref":"father","$id":ObjectId("4dcb4d1d3febc 6503 e4e 5933")}와 같은 DBRef 입 니 다.
@Ref 는 4 개의 속성 이 있 습 니 다:
name-의 미 는@Property 의 인자 name 과 같 습 니 다.
impl-@Ref 가 인터페이스(Interface)에 표시 되 어 있 으 면 impl 로 구현 클래스 를 지정 할 수 있 습 니 다.예:
@Ref(impl=MyFather.class)
private IFather father;

캐 스 케 이 드-String 형,관련 작업 을 지정 하 는 데 사 용 됩 니 다.그 값 은 C,R,U,D 네 글자 중 하나 이상 의 문자 로 구 성 될 수 있다.예 를 들 어 캐 스 케 이 드="CRUD",캐 스 케 이 드="CD",캐 스 케 이 드="CR"등등.
C,R,U,D 네 글자 가 각각 대표 하 는 의 미 는 다음 과 같다.
C:생 성,생 성
R:읽 기,읽 기
U:업데이트,수정
D:삭제,삭제
캐 스 케 이 드 속성 에 대한 상세 한 설명 을 보 세 요lazy 와 캐 스 케 이 드 속성
reduced-boolean 형 은 간단 한 저장 소 를 사용 할 지 여 부 를 지정 하 는 데 사 용 됩 니 다.기본 값 은 false 입 니 다.
reduced=false 시@Ref 필드 는 MongoDB 에"father":{"$ref":"father","$id":ObjectId("4dcb4d1d3febc 6503 e4e 5933")}와 같은 DBRef 를 저장 합 니 다.
reduced=true 일 때@Ref 필드 는 MongoDB 에 인용 대상 의 id 값 을 저장 합 니 다.$ref 속성 이 없습니다.예 를 들 어"father":"ObjectId(4dcb4d1d3febc 6503 e4e 5933)".
reduced=true 를 설정 하면 데이터 뱅 크 의 저장 공간 을 절약 할 수 있 지만 데이터 내용 은 더 이상 직관 적 이지 않 습 니 다.
@RefList
다른 대상 에 대한 인용 을 나타 내 는 집합.
@RefList 주 해 는 배열,List,Set,Map,Queue 를 지원 하지만 모두 범 형 을 사용 해 야 합 니 다.맵 을 사용 할 때 인용 대상 은 맵 의 value 일 뿐 키 일 수 없습니다.
@RefList 는 5 개의 속성 이 있 습 니 다:
name-의 미 는@Property 의 속성 name 과 같 습 니 다.
impl-의 미 는@Ref 의 속성 impl 과 유사 하 며 집합 중의 요소 의 실현 류 를 지정 합 니 다.
캐 스 케 이 드-의 미 는@Ref 의 속성 캐 스 케 이 드 와 같 습 니 다.
reduce-의 미 는@Ref 의 속성 reduced 와 같 습 니 다.
sort-String 형 은 이 List 나 set 속성 을 추출 할 때 사용 하 는 정렬 규칙 입 니 다.그 형식 은'{'level':1}'또는'{'level':1,'timestamp':-1}'과 같은 정렬 문자열 입 니 다.정렬 하지 않 으 면 sort 값 을 설정 하지 않 아 도 됩 니 다.
정렬 문자열
정렬 문자열 은 다음 과 같은 표준 JSON 형식 을 사용 할 수 있 습 니 다.
@RefList(sort="{'level': -1}")

여러 정렬 조건 이 있 으 면 중간 에 쉼표(,)로 구분 합 니 다.
@RefList(sort="{'level':1, 'timestamp':-1}")

작은 따옴표 도 생략 하고 간단 한 JSON 형식 을 사용 할 수 있 습 니 다.
@RefList(sort="{level:1}")@RefList(sort="{level:1, timestamp:-1}")

심지어 괄호 도 생략 하고 아래 처럼 간략화 하 는 것 도 지원 합 니 다.
@RefList(sort="level:1")@RefList(sort="level:1, timestamp:-1")

보조 클래스:SimpleEntity
BuguMongo 프레임 워 크 는 BuguEntity 인터페이스의 간단 한 실현 을 제공 합 니 다:Simple Entity.BuguEntity 인 터 페 이 스 를 직접 실현 하지 않 고 Simple Entity 에서 계승 할 수 있 습 니 다.
Simple Entity 는 추상 적 인 클래스 로 id 속성 이 있 으 며 기본 IdType.AUTO 를 사용 합 니 다.GENERATE 는 id 의 유형 으로 getId(),setId(),equals(),hashCode(),toString()등의 방법 을 실현 했다.또한 getTimestamp()방법 을 제공 하여 이 document 가 언제 MongoDB 에 삽입 되 었 는 지 알려 줍 니 다.(그 원 리 는 ObjectId 에서 생 성 시간 을 얻 는 것 입 니 다.)
한번 보 세 요Simple Entity 의 소스 코드.아주 간단 합 니 다.
Simple Entity 를 사용 하면 실제 모델 의 코드 를 매우 간결 하 게 할 수 있 습 니 다.다음 과 같 습 니 다.
@Entity
public class MyFoo extends SimpleEntity{
    
    private String name;

    public String getName(){
        return name;
    }

    public void setName(String name){
        this.name = name;
    }
    
}

좋은 웹페이지 즐겨찾기