달력

06

« 2017/06 »

  •  
  •  
  •  
  •  
  • 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
  •  
2010.08.17 11:10

MongoDB-Morphia DAO Support 사용하기 MongoDB2010.08.17 11:10

Document DB 역시 객체를 영속화 시키려면 객체 그대로를 저장할수는 없고, 나름대로 변경하는 작업이 필요했다. 이것은 Aspect로 뺄수 있을 것이다. 그래서 Morphia의 DAO클래스에서 그걸 처리해 준다. 해당 클래스에 대해서 좀더 알아보자. Morphia의 DAO 클래스르 확장한 Dao는 아래와 같다.

@Repository
public class AccountDaoImpl extends DAO implements AccountDao {

	@Autowired
	protected AccountDaoImpl( @Qualifier("mongo") Mongo mongo, 
							  @Qualifier("morphia") Morphia morphia, 
							  @Qualifier("dbName") String dbName) {
		super(mongo, morphia, dbName);
	}
	public Account update(Account entity) {
		this.save(entity);
		return entity;
	}
	public List find(String query) {
		return ds.find(entityClazz).filter("name = ", query).asList();
	}
}


생성자 방식의 의존성 주입 이외에 일반 DAO 클래스와 다를께 없다. Morphia DAO는 Datastore 개념의 몇가지 메서드를 제공하고 있다. 그것을 이용하여 원하는 CRUD를 구현하면 된다. 아래는 위 코드는 테스트한 코드다. 테스트 코드는 일반 테스트코드와 특별한게 없다.

	@Autowired AccountDao accountDao;
	
	@Test
	public void diTest(){
		Assert.assertNotNull(accountDao);
	}

	@Test
	public void save(){
		// save()
		Account account = new Account("yunsunghan","yunsunghan@gmail.com");
		Account account2 = accountDao.update(account);
		Assert.assertEquals("yunsunghan@gmail.com", account2.getEmail());
		// print
		System.out.println("=========================================");
		System.out.println(account.getId() +":"+account2.getId());
		System.out.println("=========================================");
		
		// find()
		List list = accountDao.find("yunsunghan");
		Assert.assertNotNull("하나이상 존재한다.", list);
		// print
		System.out.println("=========================================");
		for(Account a : list)System.out.println(a.getId() + " : " + a.getName());
		System.out.println("=========================================");
	}

이로써, 전에 봤던, toDBObject나 fromDBObject 같은 귀찮은 객체 전환 작업을 캡슐화 시킬수 있었다. 하지만 아직도 야생에서 쓰기엔 뭔가 어색해 보인다. 아직 개선의 여지가 있다는 생각이 드는 것인데, Morphia DAO를 Spring의 Template 시리즈나, Support 시리즈처럼 좀더 편리하게 쓸수는 없을까 하는 생각이 든다.

신고
Posted by summerwars


티스토리 툴바