ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • Spring MVC02 - Mapper Interface와 XML이용한 CRUD
    Web/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처리 

     

     

    출처: 나프2탄(박매일)

     

     

    *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

     

    [NarP Series] MVC 프레임워크는 내 손에 [나프2탄] - 인프런 | 강의

    본 과정은 WEB MVC 프레임워크가 무엇이고 WEB MVC 프레임워크가 어떻게 변형이 되면서 Spring WEB MVC 프레임워크로 넘어가는지 TPC(생각하고-표현하고-코딩하고) 기법을 통해 단계적으로 학습하고 이

    www.inflearn.com

     

Designed by Tistory.