Mybatis 데이터 관리 (PostgreSQL)
이번 글에서는 Mybatis를 사용하여 SQL을 실행하는 과정을 설명한다.
jdbc 를 사용하여 직접 DB작업을 해야한다면 드라이버를 로딩하고 Connection String으로 Connection 객체를 생성하여, 다시 Statement 객체를 사용하여 SQL을 실행하고 결과를 ResultSet으로 받아 객체에 담아 사용해야 한다.
Mybatis는 이런 번거로운 작업을 프레임워크 내부에서 처리하여, 사용자로 하여금 필요한 설정만 등록하여 DB작업을 수행할 수 있도록 편의성을 제공한다.
특정 테이블에 데이터를 입력(insert)하는 작업을 예로 설명을 하겠다.
이클립스 설정
이클립스을 실행하고 [File] → [New] → [Spring Start Project] 를 클릭한다.
프로젝트명 자바 버전, 아티팩트 등을 입력한다.
아래 의존성을 추가한다.
- MyBatis Framework
- PostgreSQL Driver (DB드라이버는 본인이 접속할 DB 드라이버를 선택)
- Spring Web
Finish를 누르고 , build.gradle을 선택하면 dependencies에 선택한 의존성 항목이 입력되어 있다.
application.properties를 선택하고 아래와 같이 DB접속정보를 입력한다.
spring.datasource.url=jdbc:postgresql://192.168.0.62:5444/edb
spring.datasource.username=scott
spring.datasource.password=tiger
테이블 생성
테스로 사용할 테이블을 생성한다.
CREATE TABLE MYTABLE
(
EMPNO SERIAL PRIMARY KEY NOT NULL,
ENAME VARCHAR2(20),
AGE INT,
SEX CHAR(1)
);
EMPNO 는 SERIAL 타입 컬럼으로 insert 시 자동으로 증가하게 된다.
자바 코드 작성
이제 자바 코드를 작성해 보자
먼저 MYTABLE 을 매핑할 클래스를 만든다.
public class MyTable {
private int empno;
private String ename;
private int age;
private String sex;
public int getEmpno() {
return empno;
}
public void setEmpno(int empno) {
this.empno = empno;
}
public String getEname() {
return ename;
}
public void setEname(String ename) {
this.ename = ename;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public String getSex() {
return sex;
}
public void setSex(String sex) {
this.sex = sex;
}
}
다음으로 Mapper 클래스를 만든다.
@Mapper
public interface MyTableMapper {
@Insert("INSERT INTO MyTable(ENAME, AGE, SEX) VALUES (#{mytable.ename}, #{mytable.age}, #{mytable.sex})")
int insert (@Param("mytable") MyTable mytable); //insert 성공시 1을, 실패시 0을 리턴
}
insert 메서드를 만들고 파라메터로는 MyTable 객체를 받아오게 하였다.
@Insert 애노테이션을 추가하고 SQL 을 작성한다. SQL문장의 변수는 #{클래스.속성} 형태로 작성하면 MyTable객체의 속성 값이 자동으로 매핑된다.
이제 Controller 를 만들자
@RestController
@RequestMapping("/mytable")
public class MyTableController {
@Autowired
private MyTableMapper myTableMapper;
//@RequestMapping(value="", method=RequestMethod.POST)
@PostMapping("")
public int create(@RequestBody MyTable mytable) {
return myTableMapper.insert(mytable);
}
}
HTTP POST 방식으로 서비스 요청시 body로 전송된 MyTable 정보를 가지고 Mapper 클래스의 insert 를 호출한다.
이제 Spring boot를 run 한다.
테스트 및 결과 확인
이제 HTTP 호출을 통해 테이블에 값을 입력해보자.
HTTP 호출을 위해 크롬 확장프로그램인 Talend 를 사용하였다.
body에 json 형태로 ename, age, sex 속성과 값을 입력하고 Send 버튼을 눌러 요청을 보낸다.
잠시 기다리면 아래와 같이 결과가 수신된 것을 확인할 수 있다.
리턴된 결과가 "1" 은 서버에서 정상정으로 처리(insert)되었다는 것을 의미한다.
이제 DB에서 입력된 값을 조회해 보자.
쿼리 실행을 위해 QueryOne이라는 제품을 설치하였다.
(2주 라이선스지만 홈페이지에서 계속적으로 key를 받을수 있다.)
mytable을 조회하면 HTTP로 요청했던 정보가 입력되어 있음을 확인할 수 있다.