2015.01.18 00:20

Deview2014 에서 직접 세션을 듣진 않았지만 대충 이런 모바일 DB가 뜬다는것만 알고 있었는데, 이번에 기회가 되서 함 정리해봄.


sqlite 는 너무 옛날에 사용해서 비교하지 못할거 같음.


Realm realm = Realm.getInstance(contex);


로 인스턴스를 가져오고 원하는 작업을 할 수있는데 먼저 Realm의 특징은 매우 빠르고, jpa 처럼 객체자체를 집어넣을 수 있는 ORM 이다. 그런데 뭔가 불편한 점이 있는데, 모델이 되는 객체는 반드시 RealmObject를 상속해야하고, 매서드로 getter/setter 만 가질 수 있다는 점이다.(0.76.0 기준, 다른 매서드가 들어가니 빌드 에러가 난다 -> 어노테이션프로세싱을 하기때문에 매서드 중복을 막기위해서 막아둔것 같다. 아니 그러면 차라리 모두 어노테이션프로세싱으로 돌려야지!? 불편하게 이게 뭐야....-> 음. 아직 모르는 기능인가보다.) 이게 왜 짜증나나면, DDD방식으로 개발하려면 모델자체가 어떤 간단한 기능들을 내포할 수 있어야 하는데 이게 불가능해지니...그래서 차라리 디비엔 Dto(Vo)를 널고 읽어온뒤에 오브젝트매퍼같은 녀석을 이용해 매핑해주면 그나마 편리하게 이용할 수 있을것 같다. 


쨋든, 처음에 객체를 만들땐 반드시 realm 인스턴스를 통해서 만들어야 저장이 된다. 따로 save 매서드가 있는지는 모르겠다.


realm.beginTransaction();

MyDto dto = realm.createObject(MyDto.class);

realm.commitTransaction();


쿼리할땐 where clause를 이용해서 할 수 있다. 그런데 스트링매치에 대해선 beginWith, endWith, contains 밖에 없는듯한데, like clause 가 없어서 좀 불편하다. 와일드카드가 먹히는지는 아직 확인해보지 않았다. (메서드 이름만 봐도 안되는거 같기도...)


MyDto first = realm.where(MyDto.class).findFirst();


dsl 로 여러가지 작성할수 있어서 좋긴함.


삭제의 경우 처음에 deleteRealmFile 를 사용했었는데 이게 파일을 삭제하는거다보니 문제가 조금 있었다. 

드랍 테이블과 같은 효과를 내기 위해선 그냥 clear 또는 realm.allObjects(MyDto.class).clear();와 같이 해주면 된다.


한글로 정리된것도 있어서 좋다.

http://realm.io/kr/

http://realm.io/kr/docs/java/0.75.0/


사실 저기 홈에 나온 코드만 봐도 끝인거 같다.


나머지는 예제를 보면 좋을거 같은데 예제를 androidstudio에서 열었더니 굉장히 오랫동안 로드를함..(macbook air 2013) 그마저도 약간 빌드가 꼬인거 같아서 걍 버리고코드만 구경했음.


뉴스에 있던 코드인데 이것만 봐도 90%는 알 수 있는거 같다.


Realm realm = Realm.getInstance(this);

// All writes are wrapped in a transaction
// to facilitate safe multi threading
realm.beginTransaction();

// Add a person
Person person = realm.createObject(Person.class);
person.setName("Young Person");
person.setAge(14);

realm.commitTransaction();

RealmResults<User> result = realm.where(User.class)
                                 .greaterThan("age", 10)  // implicit AND
                                 .beginGroup()
                                      .equalTo("name", "Peter")
                                      .or()
                                      .contains("name", "Jo")
                                 .endGroup()
                                 .findAll();



저작자 표시 비영리 변경 금지
신고
크리에이티브 커먼즈 라이선스
Creative Commons License
Trackback 0 Comment 0


티스토리 툴바