[Spring] MyBatis

aljongjong·2022년 1월 17일
0

학원 복습일지

목록 보기
73/84

오늘은 어제 이어서 mybatis에 대해서 배웠다.
마이바티스는 개발자가 지정한 SQL, 저장프로시저 그리고 몇가지 고급 매핑을 지원하는 퍼시스턴스 프레임워크이다. 마이바티스는 JDBC로 처리하는 상당부분의 코드와 파라미터 설정및 결과 매핑을 대신해준다. 마이바티스는 데이터베이스 레코드에 원시타입과 Map 인터페이스 그리고 자바 POJO 를 설정해서 매핑하기 위해 XML과 애노테이션을 사용할 수 있다. 마이바티스 홈페이지
설명하기 애매해서 mybatis 홈페이지에서 설명을 가지고 왔다. SQL 쿼리문 사용에 있어서 효율적인 프레임워크이다.

1) 먼저 pom.xml에 mybatis 사용을 위해 dependency를 추가한다. mybatis와 mybatis를 spring에서 사용하기 위한 mybatis-spring을 추가한다. Maven dependencies에 관련 jar파일이 다운된 것을 확인할 수 있다.


2) 그리고 servlet-context.xml에 spring container에 추가한 mybatis를 사용할 수 있도록 bean 등록을 해준다.

  • SqlSessionFactoryBean의 dataSource엔 DB 접근시 connection을 더 효율적으로 할 수 있는 dbcp 객체를 참조해준다. 그리고 configLocation은 mybatis 설정 xml의 location을 지정해주는 것이다. mapperLocations는 쿼리문을 담는 mapper.xml의 location을 지정해준다. mapper.xml은 도메인마다 쿼리를 나눠서 xml을 관리해야하니 경로에 와일드카드(*) 활용해 여러 xml의 쿼리문을 매핑할 수 있도록 해준다.
  • SqlSessionTemplate은 bean 등록시 컴파일 오류가 발생한다. 왜냐하면 기본생성자를 갖고 있지 않기 때문이다. 그래서 constructor-arg 속성을 통해 매개변수가 하나인 생성자의 파라미터에 참조변수로 위에서 등록한 SqlSessionFactoryBean 객체를 집어 넣어준다.

3) 원래 순서상 앞에서 생성해야했을 mybatis 설정 config.xml과 SQL 쿼리문 저장 mapper.xml을 생성한다. 각각 마이바티스 홈페이지에서 !DOCTYPE configuration과 mapper를 찾아 넣어준다.

  • autoMappingBehavior는 마이바티스가 칼럼을 필드/프로퍼티에 자동으로 매핑할지와 방법에 대해 명시. PARTIAL은 간단한 자동매핑만 할뿐 내포된 결과에 대해서는 처리하지 않는다. FULL은 처리가능한 모든 자동매핑을 처리한다. 기본값이 PARTIAL인데 FULL로 설정 해준다.
  • typeAliases는 별칭을 지정해주는 것이다. 아래 mapper.xml에서 parameterType 속성에 들어가고 여러번 사용될 수 있는 model 객체를 미리 별칭으로 지정해두어 사용의 편의를 줄 수 있다.
  • mapper.xml에서 mapper namespace의 값은 controller에서 접근하게 되는 이름이 된다. mapper는 xml에 하나만 사용할 수 있다. insert 속성의 id 또한 controller에서 접근하기 위해 지정해주는 값으로 여기에선 menu.insertMenu로 접근하게 된다. parameterType에 위에서 별칭으로 지정해준 menuVo를 사용하여 MenuVo 객체를 가지고와 INSERT문 중간 값이 들어갈 자리에 #{} 형식으로 model 객체의 변수명을 넣어준다.

4) 이제 controller에서 어떻게 사용하는지 알아보자.

  • 전 시간에 DB 접근을 위해 spring container에 존재하는 우리가 servlet-context.xml에 bean 등록해둔 JdbcTemplate의 객체를 가지고왔었다. 이것도 이전 jdbc에 비하면 매우 효율적인 방법이지만 controller에 직접 쿼리문을 작성해야 했었다. mybatis를 이용해서 이번엔 우리가 bean에 등록한 SqlSession 객체를 가지고온다. 그리고 insert 메소드를 사용해 매개변수로 쿼리문, 쿼리문에 전달할 값을 파라미터로 설정한다. mapper.xml에서 지정했던 namespace, id를 통해 쿼리문을 전달하면 된다.

5) 결과를 확인해본다.


0개의 댓글