블로그 이미지
Max.

calendar

        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  

Notice

'Finder'에 해당되는 글 1

  1. 2009.07.10 Roo - Finder.aj 생성하기(2)
2009.07.10 08:57 개발관련

도메인 객체를 만들었다고 Finder.aj가 자동으로 생성되진 않습니다. Finder는 경우의 수가 너무 많아서 다 만들수도 없고, 필요충분조건이 안되어서 사용자가 직접생성할수 있도록 해주고 있습니다. 물론 기본적인 Finder는 Entity.aj에 포함되어 있습니다.

Finder를 만드는 방법은 먼저 어떤 Finder명에 조건검색이 되는 필드명을 붙여가는 식으로 이름명을 짓고 그 이름명의 후보를 검색하여 해당 도메인 aj로 추가하는 방법을 채택하고 있습니다. 간단한 예를 들어 보겠습니다.

다음과 같은 도메인 객체을 생성했다고 가정합니다.
...
new persistent class jpa -name ~.domain.Article
add field string -class ~.domain.Article -fieldName title -notNull -sizeMin 2
add field string -class ~.domain.Article -fieldName userName  -sizeMin 4 -sizeMax 20 -notNull
add field date jpa -type java.util.Date -class ~.domain.Article -fieldName writeDate  -notNull
add field number -type java.lang.Long -fieldName hit -class ~.domain.Article -notNull 0
add field string -class ~.domain.Article -fieldName content -notNull -sizeMin 2 -sizeMax 200

이때, userName이라는 속성으로 검색하는 Finder를 만들어야 한다는 요구사항이 생기면, 먼저 다음과 같은 명령으로 해당 Finder명령이 있는지 검색합니다.

roo> list finders for -class ~.domain.Article
findArticlesByContent(String content)
findArticlesByContentEquals(String content)
findArticlesByContentIsNotNull()
findArticlesByContentIsNull()
findArticlesByContentLike(String content)
findArticlesByContentNotEquals(String content)
findArticlesByHit(Long hit)
findArticlesByHitBetween(Long minHit, Long maxHit)
findArticlesByHitEquals(Long hit)
findArticlesByHitGreaterThan(Long hit)
findArticlesByHitGreaterThanEquals(Long hit)
findArticlesByHitIsNotNull()
findArticlesByHitIsNull()
findArticlesByHitLessThan(Long hit)
findArticlesByHitLessThanEquals(Long hit)
findArticlesByHitNotEquals(Long hit)
findArticlesByTitle(String title)
findArticlesByTitleEquals(String title)
findArticlesByTitleIsNotNull()
findArticlesByTitleIsNull()
findArticlesByTitleLike(String title)
findArticlesByTitleNotEquals(String title)
findArticlesByUserName(String userName)
findArticlesByUserNameEquals(String userName)
findArticlesByUserNameIsNotNull()
findArticlesByUserNameIsNull()
findArticlesByUserNameLike(String userName)
findArticlesByUserNameNotEquals(String userName)
findArticlesByWriteDate(Date writeDate)
findArticlesByWriteDateBetween(Date minWriteDate, Date maxWriteDate)
findArticlesByWriteDateEquals(Date writeDate)
findArticlesByWriteDateGreaterThan(Date writeDate)
findArticlesByWriteDateGreaterThanEquals(Date writeDate)
findArticlesByWriteDateIsNotNull()
findArticlesByWriteDateIsNull()
findArticlesByWriteDateLessThan(Date writeDate)
findArticlesByWriteDateLessThanEquals(Date writeDate)
findArticlesByWriteDateNotEquals(Date writeDate)


대략 지금처럼 아주 다양한 조합의 Finder 후보를 찾을수 있습니다. 그중 마음에 드는것을 골라 놓습니다. 그리고 Finder를 추가하는 명령을 입력 합니다.

roo> install finder -finderName findArticlesByUserName
Managed SRC_MAIN_JAVA\net\max\board\domain\Article.java
Created SRC_MAIN_JAVA\net\max\board\domain\Article_Roo_Finder.aj
Managed SRC_MAIN_JAVA\net\max\board\web\ArticleController_Roo_Controller.aj
Created SRC_MAIN_WEBAPP\WEB-INF\jsp\article\findArticlesByUserName.jsp
Managed SRC_MAIN_WEBAPP\WEB-INF\jsp\menu.jsp

이제 웹사이트서 확인할수 있습니다.


소스가 생성된 뒤에는 소스에서 직접 Finder를 추가 할수도 있습니다.

@RooEntity(finders = { "findArticlesByUserName", "findArticlesByTitleEquals" })
public class Article {
...

Spirng Roo M2 버전에서는 Finder 추가시 Controller.aj 에서 약간의 버그가 있습니다. 버그는 속성명을 제대로 표현하지 못하는 버그입니다.
ex) userName이 username으로 파싱되어 지는데, 이는 해당 Add-on의 사소한 실수인듯 합니다.

[실제 자동으로 생성된 코드]   

@org.springframework.web.bind.annotation.RequestMapping(value = "find/ByUserName", method = org.springframework.web.bind.annotation.RequestMethod.GET)   
    public java.lang.String ArticleController.findArticlesByUserName(@org.springframework.web.bind.annotation.RequestParam("username") java.lang.String userName, org.springframework.ui.ModelMap modelMap) {   
        if(userName == null || username.length() == 0) throw new IllegalArgumentException("A userName is required.");       
        modelMap.addAttribute("articles", net.max.board.domain.Article.findArticlesByUserName(userName).getResultList());       
        return "article/list";       
    } 


신고

'개발관련' 카테고리의 다른 글

살아남는법 vs 살아가는법  (2) 2009.07.17
오늘은 故 노무현 전 대통령 49재 입니다.  (2) 2009.07.10
Roo - Finder.aj 생성하기  (2) 2009.07.10
Roo - @RooWebScaffoldMetadata  (0) 2009.07.10
Roo - Demo 영상  (0) 2009.07.09
공허함  (7) 2009.07.06
posted by Max.
TAG , ,
prev 1 next

티스토리 툴바