[Springboot] Postgresql + Mybatis 연동하기

HJ Kim·2023년 6월 15일
0

Springboot

목록 보기
1/1
post-thumbnail

postgresql 테이블 생성

DB 테이블을 생성한다.

	CREATE DATABASE springtodo
      ENCODING = 'UTF8'
      LC_COLLATE = 'C'
      LC_CTYPE = 'C'
      CONNECTION LIMIT = -1;

	CREATE TABLE todo (
    	id serial ,
        title varchar(20)
    )
    
    INSERT INTO todo (title) VALUES ('물 마시기');
	INSERT INTO todo (title) VALUES ('책읽기');
	INSERT INTO todo (title) VALUES ('운동하기');

프로젝트 생성

https://start.spring.io/

👀 Comment

  • IDE에서 바로 새로운 프로젝트를 생성할 수도 있다.

postgresql 설정

build.gradle 파일에 아래 설정을 확인한다.

dependencies {
	...
	runtimeOnly 'org.postgresql:postgresql'
	...
}

resources/application.properties 파일에 아래 코드를 추가하여 설정을 완료한다.

#### postgresql
spring.datasource.hikari.maximum-pool-size=4
spring.datasource.url=jdbc:postgresql://localhost:5432/springtodo #database명
spring.datasource.username=유저이름
spring.datasource.password=비밀번호
spring.datasource.driver-class-name=org.postgresql.Driver

👀 Comment

  • runtimeOnly: "TODO작성예정"
  • Postgresql의 기본 비밀번호는 postgres

페이지 생성 및 접속 확인

resources/static 폴더 아래에 index.html 파일을 생성한다.

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Hello world ~!</title>
</head>
<body>
    <div>
        SpringBoot TODO!
    </div>
</body>
</html>

👀 Comment

  • Server Run을 하고 콘솔 로그를 보면 접속 포트가 있다.
  • Tomcat started on port(s): 8080 (http) with context path ''

mybatis 설정

build.gradle 파일에 아래 설정을 확인한다.

dependencies {
	...
	implementation 'org.mybatis.spring.boot:mybatis-spring-boot-starter:3.0.2'
	...
}

resources/application.properties 파일에 아래 코드를 추가한다.

# mybatis
# mybatis.config=mybatis/mybatis-config.xml
mybatis.mapper-locations=classpath:mybatis/mapper/*.xml
mybatis.type-aliases-package=hello.springmvc.springtodo.DTO
mybatis.configuration.map-underscore-to-camel-case=true
mybatis.configuration.lazy-loading-enabled=false

👀 Comment

  • implementation: "TODO작성예정"
  • mybatis-config.xml로 설정을 구성할 수도 있고, properties를 사용할 수도 있다.

DTO 생성

객체를 구성하기 위한 파일이다.
hello.springmvc.springtodo.DTO.TodoDTO.java

import lombok.*;

@Getter
@Setter
@NoArgsConstructor
@AllArgsConstructor
public class TodoDTO {
    private Integer id;

    private String title;
}

👀 Comment

  • lombok 라이브러리를 사용하면서 아래의 어노테이션을 사용할 수 있다.
  • @Getter: getter 함수 자동 생성 (getter: 외부에서 데이터를 읽을 때 사용, 접근자)
  • @Setter: setter 함수 자동 생성 (setter: 외부에서 데이터를 변경할 때 사용, 설정자)
  • @NoArgsConstructor: 파라미터가 없는 기본 생성자를 생성해준다.
  • @AllArgsConstructor: 모든 필드에 대한 생성자를 생성한다.
  • "TODO작성예정: lombok?"

Mapper 생성

mapper은 xml 파일과 1:1 매핑되는 파일이다.
hello.springmvc.springtodo.Mapper.TodoMapper.java

import org.springframework.stereotype.Repository;
import org.apache.ibatis.annotations.Mapper;

@Repository
@Mapper
public interface TodoMapper {
    List<TodoDTO> selectTodoList();
    TodoDTO selectTodoById(Integer id);
}

👀 Comment

  • @Repository: DB 처리에 사용되는 애노테이션이다.
  • @Mapper: Mybatis에서 제공하는 애노테이션이다.

mapper xml 생성

쿼리문을 작성하는 xml 파일이다.
resources.mybatis.mapper.TodoMapper.xml

<?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="hello.springmvc.springtodo.Mapper.TodoMapper">

    <select id="selectTodoList" resultType="TodoDTO">
        SELECT id, title
        FROM public.todo
    </select>

    <select id="selectTodoById" resultType="TodoDTO">
        SELECT id, title
        FROM public.todo
        WHERE id = #{id}
    </select>

</mapper>

Controller 생성

Controller란 URL 매핑을 통해 사용자의 요청을 처리하고 응답 데이터를 응답하는 역할을 한다.
Controller에서는 Service를 주입받아 Service의 함수를 호출하는 정도만 한다.
hello.springmvc.springtodo.Controller.TodoController.java

import java.util.List;
import lombok.RequiredArgsConstructor;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

@RestController
@RequiredArgsConstructor
@RequestMapping("/todo")
public class TodoController {
    private final TodoService todoService;

    @GetMapping()
    public List<TodoDTO> selectTodoList(){
        return todoService.selectTodoList();
    }

    @GetMapping("/{id}")
    public TodoDTO selectTodoById(@PathVariable("id") int id){
        return todoService.selectTodoById(id);
    }

👀 Comment

  • @RestController: 응답 형태를 json 또는 xml 형태의 객체 데이터로 반환한다.
  • @RequiredArgsConstructor: 생성자 주입을 편하게 하기 위해 사용한다. final 혹은 @NotNull이 붙은 필드의 생성자를 자동으로 만들어준다. (TodoService)
  • @RequestMapping: 요청 주소와 특정 메소드를 매핑하기 위해 사용한다.
  • @GetMapping: GET 방식의 요청에 해당하는 메소드

Service 생성

Service는 Controller 대신 구체적이고 복잡한 로직들을 처리하는 단계이다.
확장성을 위해 Service interface를 따로 생성한다.
hello.springmvc.springtodo.Service.TodoService.java

public interface TodoService {
    public List<TodoDTO> selectTodoList();
    public TodoDTO selectTodoById(Integer id);
}

인터페이스의 구현체를 생성한다.
hello.springmvc.springtodo.Service.TodoServiceImpl.java

@Service
@RequiredArgsConstructor
public class TodoServiceImpl implements TodoService {
    private final TodoMapper todoMapper;

    @Override
    public List<TodoDTO> selectTodoList() {
        return todoMapper.selectTodoList();
    }

    @Override
    public TodoDTO selectTodoById(Integer id) {
        return todoMapper.selectTodoById(id);
    }
}
profile
소개

0개의 댓글