ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • PagingAndSortingRepository 이용해서 MongoDB 데이터 다루기
    개발/java 2012. 10. 15. 20:57
    반응형

    이전 포스팅 내용을 잘 만들었다면, PagingAndSortingRepository 를 이용하여 MongoDB 를 손쉽게 다룰 수 있다.

    PagingAndSortingRepository 는 앞서 포스팅에서도 이야기 했듯이 CrudRepository 를 상속하므로 아래의 메소드들을 모두 사용할 수 있다.

    T save(T entity);
    Iterable<T> save(Iterable<? extends T> entities);
    T findOne(ID id);
    boolean exists(ID id);
    Iterable<T> findAll();
    long count();
    void delete(ID id);
    void delete(T entity);
    void delete(Iterable<? extends T> entities);
    void deleteAll();
    Iterable<T> findAll(Sort sort);
    Page<T> findAll(Pageable pageable);
    

    이중 간단히 3가지정도만 알아본다.


    @Controller
    public class MongoController {
    
    	private static final Logger logger = LoggerFactory.getLogger(MongoController.class);
    	
    	@Autowired
    	private PersonRepository repository;
    	
    }
    

    우선 Spring MVC 프로젝트에 테스트할 컨트롤러 하나를 만든다. 여기서 PersonRepository 를 선언해서 사용했다.




    Page<T> findAll(Pageable pageable);


    이 메소드는 페이징처리하기 손쉽도록 도와주는 조회 메소드 이다. MongoDB의 대용량 데이터를 무턱대고 findAll 하는 경우는 없다고 본다. 당연히 페이징처리를 하는게 기본이고 자주쓰게 될 메소드 일거 같다. 

    Page<Person> page = repository.findAll(new PageRequest(0, 3));
    List<Person> people = page.getContent();
    

    페이지당 3개씩 보여준다 했을때, 첫번째페이지(인덱스는 0부터)의 결과를 가져오는 예제이다.




    T save(T entity);


    이 메소드는 등록(insert)할 때 사용하는 메소드이다.

    Person p = new Person("Joe", 34);
    Person p1 = this.repository.save(p);	
    
    ObjectId id = new ObjectId(p.getId());
    
    Date date = new Date(id.getTime());
    DateFormat dateFormat = DateFormat.getDateTimeInstance(DateFormat.LONG
    	, DateFormat.LONG, locale);
    String formattedDate = dateFormat.format(date);
    
    logger.info("["+formattedDate+"] " + p1.toString());
    

    Repository 에 알맞는 도메인클래스를 이용하여 객체생성한 후 save 메소드를 이용해 등록(insert)하면 된다. 저장 후에는 _id 정보가 담긴 객체가 리턴되므로 org.bson.types.ObjectId 객체로 정보를 이용할 수 있다. 여기서는 등록된 시간을 가져와 간단히 로그에 찍어봤다. 




    void deleteAll();


    해당 Collection 에 있는 모든 Document 들을 삭제한다.

    repository.deleteAll();
    

    수백수천만건 데이터를 한방에 지우는.. 무지막지한 메소드이다. 조심하시라는 차원에 소개시켜드렸으니 적절한 곳에서만 사용하시길 바란다. 



    반응형

    댓글

Designed by Tistory.