24.1 스프링-마이바티스 연동 관련 XML 파일 설정하기 890p
24.2 마이바티스 관련 XML 파일 설정하기 894p
24.3 자바 클래스와 JSP 파일 구현하기 896p
24.1 스프링-마이바티스 연동 관련 XML 파일 설정하기
890p
23장에서는 웹 프로젝트에서 마이바티스 라이브러리를 추가하여 독립적으로 사용할 수 있었음
이번 장에서는 스프링과 마이바티스를 연동해 회원 관리 기능을 구현해보자
1. 새 프로젝트 pro24 생성 후 책에서 제공하는 스프링 라이브러리를 lib 폴더에 복붙하자 (실습에서 사용되는 스프링 버전-3.0.1 호환되는 마이바티스 라이브러리 - myBatis-3.0.5.jar)
2. /WEB-INF/config - action-mybatis.xml, action-service.xml, jdbc.properties 준비
3. /WEB-INF - action-servlet.xml, web.xml 준비
[ web.xml] pro24/WebContent/WEB-INF/web.xml
애플리케이션 실행 시 여러 설정파일들을 /WEB-INF/config 폴더에서 읽어오도록 설정함 - ContextLoaderListener 이용
여러 설정 파일 - action-mybatis.xml (마이바티스 설정파일) , action-service.xml
[ action-servlet.xml ] pro24/WebContent/WEB-INF/action-servlet.xml
뷰 관련 빈과 각 URL 요청명에 대해 호출할 메서드들을 설정함
- viewResolver 빈 - viewClass, prefix, suffix 속성 설정
- memberController 빈 - methodNameResolver 속성에 memberMethodNameResolver 빈 주입, memberService 빈 주입
- memberMethodNameResolver 빈 - mappings 속성에 각 URL 요청명과 처리할 메서드 설정
- memberUrlMapping 빈 - mappings 속성에 "/member/*.do" 요청에 대해 memberController 빈이 처리하도록 설정
=> memberMethodNameResolver 빈 -(주입)-> memberController 빈 -(주입)-> memberUrlMapping 빈
[ action-mybatis.xml ] pro24/WebContent/WEB-INF/config/action-mybatis.xml
23장의 sqlMapConfig.xml 파일을 대체하는 파일임,
- propertyPlaceholderConfigurer 빈 : jdbc.properties 파일(db 설정 관련 정보들이 작성되어 있음)을 읽어옴
- dataSource 빈 : 마이바티스의 PooledDataSource 클래스를 이용함, driver, url,username, password 등 db 연결에 필요한 속성에 값을 설정함
- sqlSessionFactory 빈 : SqlSessionFactoryBean 클래스를 이용함,
dataSource 속성에 dataSource빈을 주입,
configLocation 속성에 "classpath:mybatis /model/modelConfig.xml" ,
mapperLocation 속성에 "classpath:mybatis/mappers/*.xml" 을 설정함
- memberDAO 빈 - sqlSession 속성에 sqlSession 빈을 주입함
[ action-service.xml ] pro24/WebContent/WEB-INF/config/action-service.xml
- memberService 빈 : memberDAO 속성에 memberDAO 빈을 주입함
24.2 마이바티스 관련 XML 파일 설정하기
894p
1. src 패키지 아래에 mybatis.mappers 패키지를 생성 - member.xml (23장 파일 복붙)
2. src/mybatis 패키지 아래에 model 패키지를 생성 - modelConfig.xml 파일 생성 ... memberVO빈 설정에 사용됨
[ member.xml ] pro24/src/mybatis/mappers/member.xml
mapper namespace = "mapper.member"
<resultMap> - memberVO 타입, id는 memResult
<select> id="selectAllMemberList", 전체회원정보 조회
<insert> id="insertMember" , 회원 추가
<update> id="updateMember" , 회원 정보 수정
<delete> id="deleteMember" , 회원 삭제
...
[ modelConfig.xml ] pro24/src/mybatis/model/modelConfig.xml
<typeAlias> - type="com.spring.member.vo.MemberVO" 을 alias="memberVO" 로 설정,
memberVO는 마이바티스에서 데이터 전달에 사용됨
24.3 자바 클래스와 JSP 파일 구현하기
896p
src 패키지 아래 com.spring.member 패키지 생성,
- controller 패키지 - MemberController, MemberControllerImpl
- dao 패키지 - MemberDAO, MemberDAOImpl
- service 패키지 - MemberService, MemberServiceImpl
- vo 패키지 - MemberVO
WebContent/WEB-INF/views/member 폴더 생성 - liistMembers.jsp, memberForm.jsp, modMember.jsp
[ MemberControllerImpl ] pro24/src/com/spring/member/controller/MemberControllerImpl.java
- MemberService 속성 선언
- setMemberService() - memberService 빈 주입 위한 setter
- listMembers() - 전체 회원 목록 조회,
\memberService.listMembers() 호출해서 결과 memberList 에 저장,
ModelAndView 객체 생성 (viewName( getViewName() 메서드로 구함 ) 인자로 줌),
ModelAndView 에 memberList 바인딩(addObject())
- addMember() - 요청인코딩 설정, MemberVO 객체 생성,
getParameter()&setter 로 값 설정 대신 bind(request, memberVO) 메서드 사용해 memberVO의 해당 속성에 자동으로 설정함,
memberService.addMember(memberVO) 호출,
ModelAndView 객체 생성 시 인자로 'redirect:/member/listMembers.do' 를 설정함 (ModelAndView클래스의 redirect 속성을 이용해 /member/listMembers.do 로 리다이렉트함)
mav 객체를 return
* bind() 메서드 : MultiActionController 클래스에서 제공함,
protected void bind(HttpServletRequest request, Object command)
request로부터 자동으로 값을 얻어와 command의 속성에 값을 설정함,
이때 request의 parameter의 name과 command의 속성명이 같을 때 값이 자동설정되며
command는 자바빈이어야 함, null인 객체는 command에 들어갈 수 없음
- removeMember() - 회원 삭제
request 인코딩 설정
request.getParameter("id")로 삭제할 회원 id를 가져옴
memberService.removeMember(id) 호출
ModelAndView 객체 생성 시 인자로 'redirect:/member/listMembers.do' 를 설정하여 회원 삭제 후 목록창으로 리다이렉트함
- form() - db 연동 작업이 없는 입력창 요청 시 viewName만 mav로 반환함
- getViewName() - uri를 가져와 앞(경로), 뒤(확장명) 다 잘라내고 파일명만 가져와 반환함
[ MemberServiceImpl ] /pro24/src/com/spring/member/service/MembreServiceImpl.java
- MemberDAO 속성 선언
- setMemberDAO() - memberDAO 빈을 주입하기 위한 setter
- listMembers() - memberDAO.selectAllMemberList() 호출하여 반환결과를 membersList에 저장, 컨트롤러로 return
- addMember() - memberDAO.insertMember(memberVO) 를 컨트롤러로 return
- removeMember() - memberDAO.deleteMember(id) 를 컨트롤러로 return
[ MemberDAOImpl ] /pro24/src/com/spring/member/dao/MemberDAOImpl.java
- SqlSession 속성 선언
- setSqlSession() - sqlSession 빈 주입을 위한 setter
- selectAllMemberList() - sqlSession.selectList("mapper.member.selectAllMemberList") 호출, 주입된 sqlSession 빈으로 selectList() 메서드를 호출하면서 쿼리id를 인자로 전달함, 쿼리 수행 결과 List에 담아 반환
- insertMember() - sqlSession.insert("mapper.member.insertMember", memberVO) 호출
- deleteMember() - sqlSession.delete("mapper.member.deleteMember", id) 호출
[ listMembers.jsp ] /pro24/WebContent/WEB-INF/view/member/listMembers.jsp
컨트롤러에서 바인딩된 membersList를 <c:forEach> 문을 통해 table 태그안에 출력함, id, pwd, name, email, joinDate 에 추가로 a 태그를 이용한 '삭제하기' 링크를 출력하는데, 링크를 통해 ${contextPath}/member/removeMember.do?id=${member.id} 로 요청함
내용 모두 출력 후 테이블 하단에 '회원가입' a 태그 링크를 작성, ${contextPath}/member/memberForm.do 로 요청됨
[ memberForm.jsp ] /pro24/WebContent/WEB-INF/view/member/memberForm.jsp
회원 가입창, form태그 안에 table 태그, 그 안에 input 태그를 만들어 회원정보를 입력받음,
form 태그의 action 속성값으로 ${contextPath}/member/addMember.do 를 설정함
'(책) 자바 웹을 다루는 기술' 카테고리의 다른 글
Chap 26 스프링 애너테이션 기능 (0) | 2023.09.20 |
---|---|
Chap 25 스프링 트랜잭션 기능 사용하기 (0) | 2023.09.19 |
Chap 23 마이바티스 프레임워크 사용하기 (0) | 2023.09.19 |
Chap 22 스프링 JDBC 기능 (0) | 2023.09.17 |
Chap 21 스프링 MVC 기능 (0) | 2023.09.16 |