이 글은 PostgreSQL 설정이 완료된것을 전제로 작성되었습니다.
이번 글에서는 Mybatis와 PostgreSQL을 설정하여 DB 데이터를 조회하는것이 목표입니다.
<!--DB 연결 설정(mybatis, postgreSQL)-->
<dependency>
<groupId>org.postgresql</groupId>
<artifactId>postgresql</artifactId>
</dependency>
<dependency>
<groupId>org.mybatis.spring.boot</groupId>
<artifactId>mybatis-spring-boot-starter</artifactId>
<version>2.1.3</version>
</dependency>
spring:
datasource:
driver-class-name: org.postgresql.Driver
url: jdbc:postgresql://localhost:5432/dev_db
username: savernet
password: savernet
mybatis:
# mapper 파일의 경로를 지정합니다. 아래 형식은 mapper 디렉토리 하위의 모든 xml 파일을 포함합니다.
mapper-locations: mapper/**/*.xml
configuration:
# db 컬럼명에서 언더바를 제거한 카멜케이스로 변경하여 리턴합니다.
map-underscore-to-camel-case: true
# @Alias를 스캔하는 경로를 설정합니다. 아래 형식은 프로젝트의 전체를 스캔합니다.
type-aliases-package: com.study.first_project
create table mmbr (
mmbr_id varchar(20),
mmbr_pwd varchar(20) not null,
mmbr_nm varchar(10),
mmbr_join_dtm timestamp,
primary key(mmbr_id)
);
insert into mmbr
select 'savernet'
, 'abc1234'
, '홍길동'
, now()
union all
select 'savernet2'
, 'abc1234'
, '이순신'
, now()
union all
select 'savernet3'
, 'abc1234'
, '강감찬'
, now();
DTO, VO, Entity의 개념이 다르지만, 본 글에서는 편의성을 위해 VO만 사용하여 개발을 진행하였습니다.
java.com.study.first_project 경로에 VO 디렉토리를 생성 후 VO 클래스를 추가합니다.
@Alias("MmbrVO")
@Getter
@Setter
public class MmbrVO {
String mmbrId;
String mmbrPwd;
String mmbrNm;
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
LocalDateTime mmbrJoinDtm;
}
@Alias : 해당 어노테이션을 설정하면 Mapper에서 전체 경로 대신에 Alias에 입력한 값으로 호출 할 수 있습니다. 단, Alias는 전체 프로젝트 중에서 유일해야 합니다.
@Getter : Getter 메소드를 생성해줍니다.
@Setter : Setter 메소드를 생성해줍니다.
@JsonFormat : jackson에서 제공하는 어노테이션으로 JSON응답값의 형식을 지정할 때 사용합니다. pattern을 사용하여 날짜 형식을 지정할 수 있습니다.
@DateTimeFormat : Spring에서 지원하는 어노테이션으로 해당 어노테이션이 붙은 필드나 매게변수를 날짜 또는 시간으로 선언하는 어노테이션입니다. pattern을 사용하여 날짜 형식을 지정할 수 있습니다.
application.yml 파일에서 설정한 mapper-location 설정에 맞게 디렉토리 및 Mapper.xml 파일을 생성합니다.
mapper-location은 resources 디렉토리가 루트 디렉토리이므로 resources -> mapper 디렉토리를 생성하고 mapper 디렉토리에 FirstDAOMapper를 생성합니다.
<?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="com.study.first_project.DAO.FirstDAO">
<select id="selectMmbrList" resultType="MmbrVO">
select *
from mmbr
</select>
</mapper>
@Mapper
public interface FirstDAO {
List<MmbrVO> selectMmbrList();
}
DAO의 결과를 출력해야 되므로 기존에 String으로 설정한 리턴타입을 변경합니다.
@RestController
@RequiredArgsConstructor
@RequestMapping("/first")
public class FirstController {
private final FirstService firstService;
@GetMapping("/0001")
public ResponseEntity<List<MmbrVO>> getFirst(){
List<MmbrVO> result = firstService.helloWorld();
return new ResponseEntity<List<MmbrVO>>(result, HttpStatus.OK);
}
}
@Service
@RequiredArgsConstructor
public class FirstServiceImpl implements FirstService {
private final FirstDAO dao;
@Override
public List<MmbrVO> helloWorld() {
return dao.selectMmbrList();
}
}
현재는 별도의 호출 화면이 없어 get 방식의 호출만 사용이 가능합니다.
다음 시간에는 swagger 설정을 진행한 후 post 및 delete 등의 방식을 사용해보록 하겠습니다.
전체 소스는 Gitlab 에서 확인할 수 있습니다.