티스토리 뷰
반응형
CrudRepository 혹은 PagingAndSortingRepository 인터페이스를 사용하면 MongoDB 의 Collection 을 다룰 모든 메소드가 제공되는 것이나 다름없다. 그렇다면 deleteAll() 같은 무자비한 메소드도 모든 개발자가 아무데서나 제약없이 사용 가능하다는 이야기 이다. 이런 메소드들을 선택적으로 제한하여 개발자에게 제공하고 싶다면 어떻게 할까. 사용자정의 Repository 인터페이스를 만들면 된다.
방법은 간단하다. CrudRepository 또는 PagingAndSortingRepository 인터페이스에 정의되있는 메소드들 중에 원하는 것만 copy 해서 따로 인터페이스를 만들면 된다.
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);
Selectively exposing CRUD methods
이것들 중에 노출하고 싶은 것만 골라서 아래와 같이 만들어주자.
public interface MyBaseRepository<T, ID extends Serializable> extends Repository<T, ID> { T save(T entity); T findOne(ID id); boolean exists(ID id); Page<T> findAll(Pageable pageable); }
이 인터페이스를 상속하는 Person 도메인 클래스용 인터페이스를 만든다. 이런식으로 도메인별로 사용될 쿼리메소드를 추가로 정의해서 사용하게 된다.
public interface PersonRepository extends MyBaseRepository<Person, String> { Person findByName(String name); }
Spring MVC 프로젝트에서는 컨트롤러에 두줄 추가해서 사용하면 끝.
@Controller public class MongoController { private static final Logger logger = LoggerFactory.getLogger(MongoController.class); @Autowired private PersonRepository repository; }
사실상 개발할 때 CrudRepository 를 쓰던 아니면 내가 정의한 MyBaseRepository 인터페이스를 쓰건 컨트롤러에서 바뀌는 소스는 하나도 없다. PersonRepository 가 어떤 인터페이스를 상속받을지 바뀌는 것일뿐이다.
반응형
공지사항
최근에 올라온 글
최근에 달린 댓글
- Total
- Today
- Yesterday
링크
TAG
- java
- javascript
- Google Chart Tools
- 맥북
- heroku
- 아이맥
- 마인크래프트
- 도넛차트
- R
- Oracle
- ktm모바일
- 알뜰요금제
- ggplot
- eclipse
- MongoDB
- Spring
- 이클립스
- MyBatis
- python
- ubuntu
- github
- SVN
- ggplot2
- vagrant
- 자급제폰
- ipTIME
- 셀프개통
- 막대그래프
- MySQL
- docker
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
글 보관함