티스토리 뷰

이전 포스팅 내용을 잘 만들었다면, 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();

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



반응형
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/05   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
글 보관함