셋팅이 끝났으니 Hibernate Mapping파일을 생성합니다.
New -> Other -> Hibernate -> Hibernate Mapping Files and POJOs from Database선택 -> File Name은 디폴트 ->
Avaliable Tables에서 sosi테이블 add -> JDK 5 Language Features체크, package는 sm.sosi.sosiage.map입력 후 Finish. 여기서 이상한게 매핑파일을 만들었는데, 패키지가 보이지 않습니다. 처음부터 생성되지 않은 패키지를 선택해서 그런 것 같은데, 넷빈즈 껐다 키면 보입니다-_-;(버그인 듯-_-)

이제 Dao를 하나 만들어봅시다.
sm.sosi.sosiage.dao패키지에 AgeDao클래스를 만들어봅시다. 이 클래스에 메소드는 나이를 알려주는 메소드 1개-_-; 이 클래스는 HibernateDaoSupport를 상속받습니다.
AgeDao.java
[code]public class AgeDao extends HibernateDaoSupport {
    public int searchAge(String name) {
        List<Sosi> sosi = getHibernateTemplate().find("from Sosi where name = ?", name);
        if (sosi.size() > 0) {
            return sosi.get(0).getAge();
        } else {
            return 0;
        }
    }
}[/code]
코드는 간단합니다. 제가 아직 하이버네이트를 공부중이라 저거 하나만 객체로 받아오는 걸 못하겠는데요-_-; List로 받아와서 그냥 첫번째꺼 가져오도록 했습니다-_-;

sm.sosi.sosiage.service패키지에 AgeService를 만들어봅시다.
AgeService.java
[code]public class AgeService {
    private AgeDao ageDao;

    public void setAgeDao(AgeDao ageDao) {
        this.ageDao = ageDao;
    }

    public String searchAge(String name) {
        int age = ageDao.searchAge(name);
        String message;

        if (age == 0) {
            message = name + "은/는 소녀시대의 멤버가 아닙니다.";
        } else {
            message = name + "의 나이는 " + age + "세입니다.";
        }
        return message;
    }
}[/code]
간단하게 메세지를 만들어서 리턴해주는 서비스입니다.

심플컨트롤러를 생성해봅시다. New -> Other -> Srpingframework -> Simple Form Controller선택 -> Class Name은 AgeController, package는 sm.sosi.sosiage.controller -> Finish.
AgeController.java
[code]public class AgeController extends SimpleFormController {

    private AgeService ageService;

    public void setAgeService(AgeService ageService) {
        this.ageService = ageService;
    }

    public AgeController() {
        setCommandClass(Sosi.class);
        setCommandName("sosiAge");
        setSuccessView("successView");
        setFormView("formView");
    }

    /*
    @Override
    protected void doSubmitAction(Object command) throws Exception {
        throw new UnsupportedOperationException("Not yet implemented");
    }
    */

    //Use onSubmit instead of doSubmitAction
    //when you need access to the Request, Response, or BindException objects
    @Override
    protected ModelAndView onSubmit(
            HttpServletRequest request,
            HttpServletResponse response,
            Object command,
            BindException errors) throws Exception {
        Sosi sosi = (Sosi)command;
        ModelAndView mv = new ModelAndView(getSuccessView());
        mv.addObject("message", ageService.searchAge(sosi.getName()));
        return mv;
    }
}[/code]
이제 formView와 successView만 작성하면 끝이네요.
Web Pages -> WEB-INF ->jsp에서 New -> JSP -> JSP File Name은 formView -> Finish.
formView.jsp
[code]<%@page contentType="text/html" pageEncoding="UTF-8"%>
<%@taglib prefix="form" uri="http://www.springframework.org/tags/form" %>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
   "http://www.w3.org/TR/html4/loose.dtd">

<html>
    <head>
        <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
        <title>소녀시대 짱-_-;</title>
    </head>
    <body>
        <form:form commandName="sosiAge" method="post" action="age.htm">
            소녀시대 멤버이름을 입력하세요:
            <form:input path="name" />
            <input type="submit" value="검색">
        </form:form>
    </body>
</html>[/code]
또다른 View파일 JSP File Name은 successView -> Finish.
successView.jsp
[code]<html>
    <head>
        <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
        <title>소녀시대 나이 결과</title>
    </head>
    <body>
         <h2>${message}</h2>
    </body>
</html>[/code]
이제 dispatcher-servlet.xml에 bean을 등록해봅시다.
dispatcher-servlet.xml
[code]<bean id="urlMapping" class="org.springframework.web.servlet.handler.SimpleUrlHandlerMapping">
        <property name="mappings">
            <props>
                <prop key="index.htm">indexController</prop>
                <prop key="age.htm">ageiController</prop>
            </props>
        </property>
    </bean>
   
    <bean id="viewResolver"
          class="org.springframework.web.servlet.view.InternalResourceViewResolver"
          p:prefix="/WEB-INF/jsp/"
          p:suffix=".jsp" />

    <!-- dao -->
    <bean name="ageDao"
          class="sm.sosi.sosiage.dao.AgeDao"
          p:sessionFactory-ref="sessionFactory" />

    <!-- service -->
    <bean name="ageService"
          class="sm.sosi.sosiage.service.AgeService"
          p:ageDao-ref="ageDao"/>

    <!-- controller -->
    <bean name="indexController"
          class="org.springframework.web.servlet.mvc.ParameterizableViewController"
          p:viewName="index" />
    <bean name="ageController"
          class="sm.sosi.sosiage.controller.AgeController"
          p:ageService-ref="ageService" />[/code]
실행해보면
정보: Hibernate: select sosi0_.idx as idx0_, sosi0_.name as name0_, sosi0_.age as age0_ from hibernate.sosi sosi0_ where sosi0_.name=?
이런 쿼리가 날아가네요.
사용자 삽입 이미지
사용자 삽입 이미지
태연 짱-_-; 역시 원더걸스 예제보다 소녀시대 예제가 더 접근성이 높은 듯-_-;

PS. 보니까 Hibernate도 애노테이션으로 할 수 있는 듯 한데, 그것도 좀 해봐야겠네요. 다시 하이버네이트 책을 좀 읽어봐야겠어요-_-;
 
Posted by 머드초보
,