MyBatis를 이용하여 dao를 만들 때에는 public class 가 아닌 public interface 를 이용하여 만들어 준다.
또한, @Repository가 아닌 @Mapper @Annotation을 이용하여 구현한다.
그렇다면 class 와 interface의 차이가 무엇이길래 이렇게 하는 것일까?
▶ Class 사용
- 장점
- 쿼리문 실행 전에 넣어줄 매개변수와 쿼리 결과값의 변형을 정의할 수 있다.
- Namespace를 내 마음대로 둘 수 있다.
- .xml 파일의 쿼리문 id와 mapper 메소드명을 일치시킬 필요가 없다.
- 단점
- Sqlsession 객체를 주입받아야 하며, 쿼리문 실행 시 항상 호출해야 한다.
- 쿼리문 호출 시 sqlsession에 .xml 파일의 namespce와 쿼리문 id를 매개변수로 넘겨야한다.
▶ Interface 사용
- 장점
- 메소드의 내부 구현이 불필요하다.
- Sqlsession 객체 주입이 불펼요하다.
- .xml 파일의 쿼리문 id와 mapper 메소드 명이 일치한다.
- 단점
- .xml의 Namespace가 실제 Mapper.java 위치를 가르켜야 한다.
- 메소드 내부 정의가 불가능하다.
!결론!
메소드의 내부 구현이 따로 필요 없고 .xml 쿼리문의 id와 메소드 명이 일치하기에 연관된 쿼리문을 찾기 편한 interface를 이용하는 것이 시스템 구현을 빠르게 할 수 있다.
MyBatis를 사용 할 때는 DB 구현체를 mybatis가 대신 만들어 주기 때문에 db작업 할 메서드의 기본 틀만 등록하면 된다.
파라미터로 vo 를 받기 때문에 vo의 변수명과 동일한 #{변수명 } 을 사용해서 그 전에 썼던 ? 를 대신한다.
입력값인 "num" 을 @파라미터로 받아 int num에 넣어 준다 그걸 sql 문의 #{num} 으로 사용 한다.
@Param("입력 값") 파람의 " 입력 값 " 의 내용과 #{ } 안의 내용이 동일해야 한다.
package com.example.demo.guestbook;
import java.util.ArrayList;
import java.util.Map;
import org.apache.ibatis.annotations.Delete;
import org.apache.ibatis.annotations.Insert;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;
import org.apache.ibatis.annotations.Select;
import org.apache.ibatis.annotations.Update;
@Mapper
public interface GuestBookDao {
@Select("select seq_guestbook.nextval as num from dual")
int selectNextval();
@Insert("insert into guestbook values (#{num},#{writer}#{pwd}#{content},sysdate,#{cnt})")
void insert(GuestbookVo vo);
@Select("select * from guestbook where num= #{num}")
GuestbookVo select(@Param("num") int num);
@Update("update guestbook set content=#{content} where num= #{num}")
void update(GuestbookVo vo);
@Delete("delete from guestbook where num=#{num}")
void delete(@Param("num") int num);
@Update("update guestbook set cnt = cnt + 1 where num=#{num}")
void like(@Param("num") int num);
@Select("select cnt from guestbook where num =#{num}")
int selectCnt(@Param("num") int num);
@Select("select * from guestbook")
ArrayList<GuestbookVo> selectAll();
}
아주아주 간단해진 dao! 많이 생략해서 처음에는 헷갈리겠지만 사용할때 아주 용이할 것 같다
'spring 스프링' 카테고리의 다른 글
[spring] 스프링 기초 설정 (0) | 2023.05.18 |
---|---|
[Spring] JPA (Java Persistence API) (3) | 2023.05.18 |
[MyBatis] 마이바티스 개념 및 정리 (0) | 2023.05.15 |
lombok (롬복) 라이브러리 스프링으로 사용 (0) | 2023.05.15 |
[spring] 스프링 session (0) | 2023.05.12 |