DTO
개요
DTO는 Data Transfer Object의 약자로 계층간 데이터 교환을 위해 사용하는 객체이다.
DTO 내부에는 로직이 존재하지 않으며, 생성자와 getter
, setter
만 존재해야 한다.
DTO 예시
import lombok.Getter;
@Getter
public class MemberDto {
private String id;
private String pwd;
private String name;
private String email;
private int auth;
public MemberDto() {
}
public MemberDto(String id, String pwd, String name, String email, int auth) {
this.id = id;
this.pwd = pwd;
this.name = name;
this.email = email;
this.auth = auth;
}
}
Lombok을 pom.xml
에 추가했기 때문에 Getter
어노테이션을 추가하여 따로 getter
를 생성해주지 않아도 된다.setter
는 어노테이션을 사용하지 않고 필요한 것만 별도로 선언해서 사용해야 한다.
DAO
개요
DAO는 Data Access Object의 약자로 데이터베이스에 접근하기 위한 로직과 비지니스 로직을 분리하기 위해 사용한다.
DAO 예시
import com.example.sample02.dto.MemberDto;
import org.apache.ibatis.annotations.Mapper;
import org.springframework.stereotype.Repository;
import java.util.List;
@Mapper
@Repository
public interface MemberDao {
// mapper.xml의 id와 함수명이 일치해야함.
List<MemberDto> allMember();
void addMember(MemberDto dto);
}
스프링 프레임워크에서는 DAO를 인터페이스와 그것을 상속받는 클래스 모두 구현해주었지만 스프링 부트에서는 인터페이스만 작성한다. 이 때 mapper.xml
즉 마이바티스를 사용하기 위해 작성한 mapper 태그의 아이디와 같아야한다.
<?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.example.sample02.dao.MemberDao">
<select id="allMember" resultType="com.example.sample02.dto.MemberDto">
SELECT * FROM mysql.MEMBERS
</select>
<insert id="addMember" parameterType="com.example.sample02.dto.MemberDto">
insert into mysql.MEMBERS(USER_ID, USER_PWD, USER_NAME, USER_EMAIL, AUTH)
values (#{id}, #{pwd}, #{name}, #{email}, #{auth})
</insert>
</mapper>
여기에는 Mapper
와 Repository
어노테이션이 붙는다..
@Mapper
가 <mapper />
를 찾아주고 클래스 내부 함수 이름으로 namespace
를 찾아 쿼리문을 실행시킨 데이터를 가져오게 된다.
Service
개요
Service
는 DAO에서 받아온 데이터를 가공해주는 곳이다.
Service 예시
import com.example.sample02.dao.MemberDao;
import com.example.sample02.dto.MemberDto;
import lombok.RequiredArgsConstructor;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import java.util.List;
@Service
@Transactional
@RequiredArgsConstructor
public class MemberService {
private final MemberDao dao;
public List<MemberDto> allMember() {
return dao.allMember();
}
public void addMember(MemberDto dto) {
dao.addMember(dto);
}
}
@RequiredArgsConstructor
는 생성자를 만들어주는 어노테이션이다. 생성자로 만들 변수는 final
로 선언되어야 한다.
@Service
와 @Transational
이 붙는다.
Controller
개요
Controller는 사용자가 웹 브라우저에 URI로 요청을 보낼 때 그 요청을 받아 응답을 반환하기 위해 사용하는 것이다.
Controller 예시
import com.example.sample02.dto.MemberDto;
import com.example.sample02.service.MemberService;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;
import java.util.List;
@Slf4j
@RestController
@RequiredArgsConstructor
public class Controller {
private final MemberService service;
public Logger logger = LoggerFactory.getLogger(Controller.class);
@GetMapping("/base")
public String base() {
logger.info("Hello World!");
return "base";
}
@GetMapping("/dbTest")
public List<MemberDto> dbTest() {
logger.info("Controller getMember()");
return service.allMember();
}
@GetMapping("/addMember")
public void addMember(MemberDto dto) {
logger.info("Controller addMember()");
service.addMember(dto);
System.out.println("추가됨");
}
}
스프링 부트는 RESTful API로 정보를 송수신하기 때문에 @RestController
를 달아준다.
'Study > Spring & Spring Boot' 카테고리의 다른 글
[Spring Boot] 게시판 기능 구현하기(2) (0) | 2022.02.24 |
---|---|
[Spring Boot] 게시판 기능 구현하기(1) (0) | 2022.02.23 |
[Spring Boot] AJAX를 사용한 비동기 통신 (0) | 2022.02.22 |
[Spring Boot] MyBatis로 DB연결, 접근 권한 설정 관리 (0) | 2022.02.21 |
[Spring Boot] 프로젝트 구조 및 초기 설정 (0) | 2022.02.21 |