AWS Back Day 69. "Spring Boot와 MyBatis를 활용한 수강신청 웹 애플리케이션 구현"

이강용·2023년 4월 10일
1

Spring Boot

목록 보기
4/20

STS4 다운그레이드 하는 법

sts4 previous version

해당 버전 설치

java로 시작하는 명은 모두 UTF-8로 변경

Course 등록하기 (DB 연동)

controller > CourseController

CourseController

package com.web.study.controller.lecture;

import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RestController;

import com.web.study.dto.ResponseDto;
import com.web.study.dto.request.course.CourseReqDto;
import com.web.study.service.CourseService;

import lombok.RequiredArgsConstructor;

@RestController
@RequiredArgsConstructor
public class CourseController {
	
	private final CourseService courseService;
	//Create
	@PostMapping("/course")
	public ResponseEntity<? extends ResponseDto> register(@RequestBody CourseReqDto CourseReqDto) {
		courseService.registeCourse(CourseReqDto);
		return ResponseEntity.ok().body(ResponseDto.ofDefault());
	}

}

domian.entity
Course

package com.web.study.domain.entity;

import java.time.LocalDate;

import lombok.Builder;
import lombok.Getter;
import lombok.ToString;

@Builder
@Getter
@ToString 
public class Course {
	private int id;
	private int lecture_id;
	private int student_id;
	private LocalDate registe_date;
}

dto.request.course
CourseReqDto

package com.web.study.dto.request.course;

import java.time.LocalDate;

import com.web.study.domain.entity.Course;

import lombok.Setter;
import lombok.ToString;

@Setter
@ToString
public class CourseReqDto {
	
	private int lectureId;
	private int studentId;
	private LocalDate registeDate;
	
	public Course toEntity() {
		return Course.builder()
				.lecture_id(lectureId)
				.student_id(studentId)
				.registe_date(registeDate)
				.build();
	}
}

repository
CourseRepository

package com.web.study.repository;

import org.apache.ibatis.annotations.Mapper;

import com.web.study.domain.entity.Course;



@Mapper
public interface CourseRepository {
	
	// insert, update, delete 리턴 자료형 없음
	public int registe(Course course );


}

service

CourseService

package com.web.study.service;

import com.web.study.dto.request.course.CourseReqDto;

public interface CourseService {
	
	public void registeCourse(CourseReqDto courseReqDto);

}

CourseServiceImpl

package com.web.study.service;

import org.springframework.stereotype.Service;

import com.web.study.domain.entity.Course;
import com.web.study.dto.request.course.CourseReqDto;
import com.web.study.repository.CourseRepository;

import lombok.RequiredArgsConstructor;

@Service
@RequiredArgsConstructor
public class CourseServiceImpl implements CourseService {
	private final CourseRepository courseRepository;

	

	@Override
	public void registeCourse(CourseReqDto courseReqDto) {
		Course course = courseReqDto.toEntity();
		courseRepository.registe(course);
		
	}
}

src/main/resources
mappers
course.xml

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper
  PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
  "https://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.web.study.repository.CourseRepository">
  
  <insert id="registe" parameterType="Course"> 
  	insert into course_mst
  	values (0, #{lecture_id}, #{student_id},  #{registe_date})
  </insert>
</mapper>

POSTMAN에서 조회하기

Repository > Service > Controller 순서로 작성

LecturerRepository

package com.web.study.repository;

import java.util.List;

import org.apache.ibatis.annotations.Mapper;

import com.web.study.domain.entity.Lecturer;



@Mapper
public interface LecturerRepository {
	
	
	// insert, update, delete 리턴 자료형 없음
	public int registe(Lecturer lecturer);
	public List<Lecturer> getLecturerAll();


}

mappers > lecturer.xml

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper
  PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
  "https://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.web.study.repository.LecturerRepository">
  
  <insert id="registe" parameterType="Lecturer"> 
  	insert into lecturer_mst
  	values (0, #{name},  #{birth_date})
  </insert>
  
  <select id="getLecturerAll" resultType="Lecturer">
  	select	
  		id,
  		name,
  		birth_date
	from
		lecturer_mst
  
  </select>
</mapper>

service > LecturereService

package com.web.study.service;

import java.util.List;

import com.web.study.domain.entity.Lecturer;
import com.web.study.dto.request.lecture.LecturerReqDto;

public interface LecturerService {
	
	public void registeLecturer(LecturerReqDto lecturerReqDto);
	public List<Lecturer> getLecturerAll();
}

LecturerServiceImpl

package com.web.study.service;

import java.util.List;

import org.springframework.stereotype.Service;

import com.web.study.domain.entity.Lecturer;
import com.web.study.dto.request.lecture.LecturerReqDto;
import com.web.study.repository.LecturerRepository;

import lombok.RequiredArgsConstructor;

@Service
@RequiredArgsConstructor
public class LecturerServiceImpl implements LecturerService {
	private final LecturerRepository lecturerRepository;

	@Override
	public void registeLecturer(LecturerReqDto lecturerReqDto) {
		
		Lecturer lecturer = lecturerReqDto.toEntity();
		lecturerRepository.registe(lecturer);
		
	}

	@Override
	public List<Lecturer> getLecturerAll() {
		return lecturerRepository.getLecturerAll();
	}
}

controller > LecturerController

package com.web.study.controller.lecture;

import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RestController;

import com.web.study.dto.DataResponseDto;
import com.web.study.dto.ResponseDto;
import com.web.study.dto.request.lecture.LecturerReqDto;
import com.web.study.service.LecturerService;

import lombok.RequiredArgsConstructor;



@RestController 
@RequiredArgsConstructor
public class LecturerController {
	private final LecturerService lecturerService;
	//Create
	@PostMapping("/lecturer")
	public ResponseEntity<? extends ResponseDto> register(@RequestBody LecturerReqDto lecturerReqDto) {
		lecturerService.registeLecturer(lecturerReqDto);
		System.out.println(lecturerReqDto);
		return ResponseEntity.ok().body(ResponseDto.ofDefault());
	}
	
	
	@GetMapping("/lecturers")
	public ResponseEntity<? extends ResponseDto> getLecturers() {
		
		return ResponseEntity.ok().body(DataResponseDto.of(lecturerService.getLecturerAll()));
	}
}

ID로 조회하기 (Lecturer, Student)

LecturerRepository > lecturer.xml > LecturerService > LecturerServiceImpl > LecturerController >

스네이크 표기법을 어떻게 수정할 것인가?

알리어스(as)

Dto로 만들기 (추천 방법)

why?

dto > response(패키지 생성) > LecturerRespDto

package com.web.study.dto.response;

import java.time.LocalDate;

import lombok.Builder;
import lombok.Getter;

@Builder
@Getter
public class LecturerRespDto {
	
	private int id;
	private  String name;
	private LocalDate birthDate;
	
}

domain.entity > Lecturer

package com.web.study.domain.entity;

import java.time.LocalDate;

import com.web.study.dto.response.LecturerRespDto;

import lombok.Builder;
import lombok.Getter;
import lombok.ToString;


@Builder
@Getter
@ToString
public class Lecturer {
	
	private int id;
	private String name;
	private LocalDate birth_date;
	
	public LecturerRespDto toDto() {
		return LecturerRespDto.builder()
				.id(id)
				.name(name)
				.birthDate(birth_date)
				.build();
	}
}

LecturerService

package com.web.study.service;

import java.util.List;

import com.web.study.dto.request.lecture.LecturerReqDto;
import com.web.study.dto.response.LecturerRespDto;

public interface LecturerService {
	
	public void registeLecturer(LecturerReqDto lecturerReqDto);
	public List<LecturerRespDto> getLecturerAll();
	public LecturerRespDto findLecturerById(int id);
}

LecturerServiceImpl

package com.web.study.service;

import java.util.ArrayList;
import java.util.List;

import org.springframework.stereotype.Service;

import com.web.study.domain.entity.Lecturer;
import com.web.study.dto.request.lecture.LecturerReqDto;
import com.web.study.dto.response.LecturerRespDto;
import com.web.study.repository.LecturerRepository;

import lombok.RequiredArgsConstructor;

@Service
@RequiredArgsConstructor
public class LecturerServiceImpl implements LecturerService {
	private final LecturerRepository lecturerRepository;

	@Override
	public void registeLecturer(LecturerReqDto lecturerReqDto) {
		
		Lecturer lecturer = lecturerReqDto.toEntity();
		lecturerRepository.registe(lecturer);
		
	}

	@Override
	public List<LecturerRespDto> getLecturerAll() {
		List<LecturerRespDto> dtos = new ArrayList<>();
		lecturerRepository.getLecturerAll().forEach(entity -> {
			dtos.add(entity.toDto());
		});

		return dtos;

	}

	@Override
	public LecturerRespDto findLecturerById(int id) {
		return lecturerRepository.findLecturerById(id).toDto();
	}
}

수강목록 전체 조회

누가 어떤 강의를 신청 했는가?

course.xml >CourseController

MyBatipse 1.3.0 자동완성 기능 설치

Eclipse Web Developer Tools 3.27설치

Course

package com.web.study.domain.entity;

import java.time.LocalDate;

import lombok.Builder;
import lombok.Getter;
import lombok.ToString;

@Builder
@Getter
@ToString 
public class Course {
	private int id;
	private int lecture_id;
	private int student_id;
	private LocalDate registe_date;
	private Lecture lecture;
	private Student student;
}

Course.xml

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper
  PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
  "https://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.web.study.repository.CourseRepository">

	<resultMap type="com.web.study.domain.entity.Lecturer" id="lecture">
		<result column="id" property="id"/>
		<result column="lecture_name" property="lecture_name"/>
		<result column="lecture_price" property="lecture_price"/>
		<result column="lecturer_id" property="lecturer_id"/>
	</resultMap>
	
	<resultMap type="com.web.study.domain.entity.Student" id="student">
		<result column="id" property="id"/>
		<result column="name" property="name"/>
		<result column="birth_date" property="birth_date"/>
	</resultMap>
	
	<resultMap type="com.web.study.domain.entity.Course" id="course">
		<result column="id" property="id"/>
		<result column="lecture_id" property="lecture_id"/>
		<result column="student_id" property="student_id"/>
		<result column="registe_date" property="registe_date"/>
		<collection property="lecture" resultMap="lecture"></collection>
		<collection property="student" resultMap="student"></collection>
	</resultMap>
  
  <insert id="registe" parameterType="Course"> 
  	insert into course_mst
  	values (0, #{lecture_id}, #{student_id},  #{registe_date})
  </insert>
  
  <select id="getCourseAll" resultType="Course">
  	select
  		cm.id,
  		cm.lecture_id,
  		cm.student_id,
  		cm.registe_date,
  		lm.id,
  		lm.lecture_name,
  		lm.lecture_price,
  		lm.lecturer_id,
  		lrm.id,
  		lrm.name,
  		lrm.birth_date,
  		sm.id,
  		sm.name,
  		sm.birth_data
  	
  	from
  		course_mst cm
  		left outer join lecture_mst lm on(lm.id = cm.lecture_id)
  		left outer join lecturer_mst lrm on(lrm.id = lm.lecturer_id)
  		left outer join student_mst sm on(sm.id = cm.student_id)
  	
  </select>
  
 
</mapper>

MySQL

Table 명 짓는법

  • 명사의 조합
profile
HW + SW = 1

0개의 댓글