-
Spring MVC02 - Mapper Interface와 XML이용한 CRUDWeb/Spring 2023. 6. 29. 21:10
- 기존 프로젝트에 DAO객체를 없애고 다른 방법으로 DB를 다루는 방식이 존재한다.
- 인터페이스를 정의하고, 추상메서드와 sql을 연결하는 방법이다.
(인터페이스 메서드명, mapper xml에 id랑 연결)
DAO없이 인터페이스를 통해 DB작업을 하고 싶다면,
1. mapper 인터페이스 생성하고, @Mapper 어노테이션 사용
2. root.xml에 어노테이션과 scan등록하기
3. mapper파일 namespace와 인터페이스 이름 맞추기 (되도록 같은 경로에 두기)
4. 메서드 명과 xml에 각 태그에 id가 일치시키기
1. Mapper 인터페이스 생성
kr.bit.mapper 패키지와 MemberMapper 인터페이스를 정의해 두었다.
@Mapper // MyBatis(SqlSessionFactory + sqlSession) public interface MemberMapper { public List<MemberVO> memberList(); public int memberInsert(MemberVO vo); public int memberDelete(int num); public MemberVO memberContent(int num); public int memberUpdate(MemberVO vo); }
mapper.xmldp namespace에 적힌 패키지 및 경로가 인터페이스 경로 및 이름과 같아야 한다.
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd"> <mapper namespace="kr.bit.mapper.MemberMapper"> <select id="memberList" resultType="memberVO"> select * from member </select> //...
위 둘은 같은 패키지 아래 두자
2. @Mapper어노테이션, root-context 수정
- @Mapper 어노테이션을 인터페이스에 달아주자 Mybaris(SqlsessionFactory + sqlsession)이 내부적으로 불러온다.
- 인터페이스도 실제 메모리 인터페이스 객체 메모리에 올라옴
2.1 scan 설정
<mybatis-spring:scan base-package="kr.bit.mapper"/>
을 추가하자 root.context가 실행되며, Mapper Interface와 xml파일을 인식함!
이 태그를 사용하기 위해서 root-context에 mybatis-spring namespace를 추가해야한다.
xmlns:mybatis-spring=http://mybatis.org/schema/mybatis-spring 태그추가 xsi:schemaLocation=" http://mybatis.org/schema/mybatis-spring http://mybatis.org/schema/mybatis-spring-1.2.xsd
* 태그와 태그가 정의된 스키마파일
이제 패키지 안에 인터페이스와 xml파일을 spring이 관리한다. XML파일이 여러개 있을 수 있는데 이는 namespace 교차확인해서 서로 연결한다.
2.2 필요없는 부분 삭제
이제 MemberDAO를 삭제하고, root.context에서 sql세션 팩토리를 만드는 부분에서
property name="mapperLocations" value="classpath:kr/bit/mybatis/*.xml" />
맵핑 파일 프로퍼티 설정은 지워도 된다! (맵핑 xml파일이 인터페이스와 다른 경로상에 있다면 넣어주자)
3. 컨트롤러에서 사용
@Controller public class MemberController { @Autowired //private MemberDAO dao; private MemberMapper memberMapper; @RequestMapping("/memberList.do") public String memberList(Model model) { //HttpServletRequest == model //MemberDAO dao = new MemberDAO(); 쓰지말자 List<MemberVO> list =memberMapper.memberList(); model.addAttribute("list",list); return "memberList"; }
MemberMapper 인터페이스를 주입받아서 DAO대신에 사용하면 된다!
DB연결을 위한 클래스 없애고, 인터페이스와 xml파일만으로 컨트롤러에서 DB처리
*MemberDAO - > mybatis연결하면서 부터
- SqlsessionFactory 생성 (config.xml파일 읽어서) - DB접속
- connection(sql session)을 통해 sql문 실행하고, DB로부터 넘어온 값 받음
- 다시 컨트롤러에 값 반환
이 중에서 SqlsessionFactory 생성하는 것 외에 나머지는 메서드 호출만하고 딱히 뭘 하진 않았음
이제 Spring에서 connection pool을 생성해주므로, 역할이 애매해짐
*기존 Spring Export/import를 File system으로 하는 법
pom파일에 name이랑 servlet-context에 componet scan부분만 바꿈
- 적용안되면, 메이븐 업데이트 혹은 프로젝트 클린 후 리빌드
참고자료: 나프2탄(인프런) - 박매일
https://www.inflearn.com/course/%EB%82%98%ED%94%84-mvc-2
'Web > Spring' 카테고리의 다른 글
Spring MVC02 - Ajax MemberList (0) 2023.06.29 Spring MVC02 - 어노테이션을 이용한 Mapper 인터페이스 사용 (0) 2023.06.29 Spring MVC01 - 스프링 동작 절차 (0) 2023.06.28 Spring MVC01 - DB연결하기 (0) 2023.06.28 Spring (1) - 기존 servlet-jsp와 차이점 (0) 2023.06.28