셋팅이 끝났으니 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도 애노테이션으로 할 수 있는 듯 한데, 그것도 좀 해봐야겠네요. 다시 하이버네이트 책을 좀 읽어봐야겠어요-_-;
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도 애노테이션으로 할 수 있는 듯 한데, 그것도 좀 해봐야겠네요. 다시 하이버네이트 책을 좀 읽어봐야겠어요-_-;