반응형
MyBatis 마이바티스
마이바티스는 자바 언어를 위한 오픈 소스 데이터 매퍼 프레임워크이다. 데이터 매퍼는 데이터베이스와 어플리케이션간의 상호작용을 담당하는 계층으로, 데이터베이스의 데이터를 객체로 매핑하고 SQL 쿼리를 실행하여 데이터를 조작한다. 마이바티스는 이러한 데이터 매퍼 계층을 효과적으로 구현하고 사용할 수 있도록 도와준다.
MyBatis Vo 생성 법칙
MyBatis에서의 Vo에서 Date속성은 sql.Date를 임포트한다. 아래의 Setter, Getter은 롬복을 사용하였다.
import java.sql.Date;
import lombok.AllArgsConstructor;
import lombok.Getter;
import lombok.NoArgsConstructor;
import lombok.Setter;
import lombok.ToString;
@Setter //setter
@Getter //getter
@ToString //toString
//@NoArgsConstructor //파람없는, argument 없는 생성자
//@AllArgsConstructor //모든 파라메터를 받는 생성자
//@Data / 모든걸 생성해줌
public class GuestBookVo {
private int num;
private String writer;
private Date w_date;
private String pwd;
private String content;
private int cnt;
}
MyBatis Dao 생성 법칙
마이바티스의 Dao는 Interface로 생성해주며, Mapper 어노테이션을 인터페이스 전체에 적용한다.
※ Interface 는 상수와 추상메서드만 가지고 있기 때문에 주의해서 사용한다.
마이바티스에서는 사용할 DML 어노테이션과 SQL문을 입력해준다. DB구현체를 Mybatis가 대신 만들어주기 때문에 DB작업을 진행할 메소드의 기본 틀만 등록하면 되기 때문이다.
※ DML (Data Manipulation Language) : Select, Insert, Update, Delete
Vo에서 받아오는 변수는 #{변수명} 으로 작성한다.
이때, 파라메터의 이름과 변수의 이름이 같아야 한다. (아래 예시 참고)
@Select("select * from guestbook where num= #{kkk}")
GuestBookVo select(@Param("kkk") int num);
@Mapper //mapper 클래스임을 mybatis에 전달.
public interface GuestDao { //interface 는 상수와 추상메서드만
@Select("select seq_guestbook.nextval as num from dual")
int selectNextval();
@Insert("insert into guestbook values(#{num},#{writer},sysdate,#{pwd},#{content},0)")
//#{num} 파라메터로 받아오는 VO의 멤버변수이름. 받아온 값을 해당 위치에 넣어줌
void insert(GuestBookVo vo);
@Select("select * from guestbook where num= #{num}")
GuestBookVo select(@Param("num") int num);
//select 는 vo가 아니라 num만 받아오니까 파라메터 "num"의 이름과 #{num}의 이름이 같아야한다.
@Select("select * from guestbook")
ArrayList<GuestBookVo> selectAll();
@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 updateCnt(@Param("num") int num);
@Select("select cnt from guestbook where num=#{num}")
int selectCnt(@Param("num") int num);
}
MyBatis Service 생성 법칙
서비스는 기존과 같이 생성한다. @Service 어노테이션과 @Autowired를 아래의 예시와 같이 사용한다.
package com.example.demo.guestbook;
import java.math.BigDecimal;
import java.util.ArrayList;
import java.util.Map;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
@Service
public class GuestService {
@Autowired
private GuestDao dao;
public int addBook(GuestBookVo vo) {//작성자, 글내용, pwd
int num = dao.selectNextval(); //글번호 생성
vo.setNum(num);//vo에 생성한 시퀀스 번호 저장. 이 글의 번호로 사용됨
dao.insert(vo);//db에 저장
return num; //방금 추가된 글의 번호 반환
}
public GuestBookVo getBook(int num) {
return dao.select(num);
}
public ArrayList<GuestBookVo> getAll(){
return dao.selectAll();
}
public void editBook(GuestBookVo vo) {
dao.update(vo);
}
public void delBook(int num) {
dao.delete(num);
}
public void editCnt(int num) {
dao.updateCnt(num);
}
public int getCnt(int num) {
int cnt = dao.selectCnt(num);
return cnt;
}
}
반응형