From 36126050edb9872e1db60cd371c5e1294a1f106f Mon Sep 17 00:00:00 2001 From: Taehyeon Jo <70999462+whxogus215@users.noreply.github.com> Date: Sat, 7 Sep 2024 09:40:31 +0900 Subject: [PATCH 1/5] =?UTF-8?q?feat:=20JdbcTemplate=EC=9D=84=20=ED=99=9C?= =?UTF-8?q?=EC=9A=A9=ED=95=98=EC=97=AC=20batchInsert=20=EC=9D=B8=ED=84=B0?= =?UTF-8?q?=ED=8E=98=EC=9D=B4=EC=8A=A4=20=EB=B0=8F=20=EA=B5=AC=ED=98=84?= =?UTF-8?q?=EC=B2=B4=20=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../dao/CompletedCoursesDao.java | 4 +- .../dao/CustomCompletedCoursesDao.java | 11 ++++++ .../dao/CustomCompletedCoursesDaoImpl.java | 37 +++++++++++++++++++ 3 files changed, 51 insertions(+), 1 deletion(-) create mode 100644 src/main/java/com/example/gimmegonghakauth/dao/CustomCompletedCoursesDao.java create mode 100644 src/main/java/com/example/gimmegonghakauth/dao/CustomCompletedCoursesDaoImpl.java diff --git a/src/main/java/com/example/gimmegonghakauth/dao/CompletedCoursesDao.java b/src/main/java/com/example/gimmegonghakauth/dao/CompletedCoursesDao.java index 17a2294..efe4e8c 100644 --- a/src/main/java/com/example/gimmegonghakauth/dao/CompletedCoursesDao.java +++ b/src/main/java/com/example/gimmegonghakauth/dao/CompletedCoursesDao.java @@ -7,6 +7,8 @@ import org.springframework.stereotype.Repository; @Repository -public interface CompletedCoursesDao extends JpaRepository { +public interface CompletedCoursesDao + extends JpaRepository, CustomCompletedCoursesDao { + List findByUserDomain(UserDomain userDomain); } diff --git a/src/main/java/com/example/gimmegonghakauth/dao/CustomCompletedCoursesDao.java b/src/main/java/com/example/gimmegonghakauth/dao/CustomCompletedCoursesDao.java new file mode 100644 index 0000000..93ab8a4 --- /dev/null +++ b/src/main/java/com/example/gimmegonghakauth/dao/CustomCompletedCoursesDao.java @@ -0,0 +1,11 @@ +package com.example.gimmegonghakauth.dao; + +import com.example.gimmegonghakauth.domain.CompletedCoursesDomain; +import java.util.List; +import org.springframework.transaction.annotation.Transactional; + +public interface CustomCompletedCoursesDao { + + @Transactional + void saveAll(List completedCourses); +} diff --git a/src/main/java/com/example/gimmegonghakauth/dao/CustomCompletedCoursesDaoImpl.java b/src/main/java/com/example/gimmegonghakauth/dao/CustomCompletedCoursesDaoImpl.java new file mode 100644 index 0000000..d8ccd6c --- /dev/null +++ b/src/main/java/com/example/gimmegonghakauth/dao/CustomCompletedCoursesDaoImpl.java @@ -0,0 +1,37 @@ +package com.example.gimmegonghakauth.dao; + +import com.example.gimmegonghakauth.domain.CompletedCoursesDomain; +import java.sql.PreparedStatement; +import java.sql.SQLException; +import java.util.List; +import lombok.RequiredArgsConstructor; +import org.springframework.jdbc.core.BatchPreparedStatementSetter; +import org.springframework.jdbc.core.JdbcTemplate; + +@RequiredArgsConstructor +public class CustomCompletedCoursesDaoImpl implements CustomCompletedCoursesDao { + + private final JdbcTemplate jdbcTemplate; + + @Override + public void saveAll(List completedCourses) { + String sql = "insert into completed_course (semester, user_id, year) values (?,?,?)"; + + jdbcTemplate.batchUpdate( + sql, + new BatchPreparedStatementSetter() { + @Override + public void setValues(PreparedStatement ps, int i) throws SQLException { + CompletedCoursesDomain course = completedCourses.get(i); + ps.setString(1,course.getSemester()); + ps.setLong(2, course.getUserDomain().getId()); + ps.setInt(3,course.getYear()); + } + + @Override + public int getBatchSize() { + return completedCourses.size(); + } + }); + } +} From 6bc26fc282b9b489c2a85265626f31422b7a2c02 Mon Sep 17 00:00:00 2001 From: Taehyeon Jo <70999462+whxogus215@users.noreply.github.com> Date: Sat, 7 Sep 2024 09:49:56 +0900 Subject: [PATCH 2/5] =?UTF-8?q?fix:=20INSERT=20=EC=BF=BC=EB=A6=AC=EB=AC=B8?= =?UTF-8?q?=20=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - courses_id를 빼먹어서 발생한 예외 해결 --- .../dao/CustomCompletedCoursesDaoImpl.java | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/src/main/java/com/example/gimmegonghakauth/dao/CustomCompletedCoursesDaoImpl.java b/src/main/java/com/example/gimmegonghakauth/dao/CustomCompletedCoursesDaoImpl.java index d8ccd6c..325b058 100644 --- a/src/main/java/com/example/gimmegonghakauth/dao/CustomCompletedCoursesDaoImpl.java +++ b/src/main/java/com/example/gimmegonghakauth/dao/CustomCompletedCoursesDaoImpl.java @@ -15,7 +15,7 @@ public class CustomCompletedCoursesDaoImpl implements CustomCompletedCoursesDao @Override public void saveAll(List completedCourses) { - String sql = "insert into completed_course (semester, user_id, year) values (?,?,?)"; + String sql = "insert into completed_course (course_id, semester, user_id, year) values (?,?,?,?)"; jdbcTemplate.batchUpdate( sql, @@ -23,9 +23,10 @@ public void saveAll(List completedCourses) { @Override public void setValues(PreparedStatement ps, int i) throws SQLException { CompletedCoursesDomain course = completedCourses.get(i); - ps.setString(1,course.getSemester()); - ps.setLong(2, course.getUserDomain().getId()); - ps.setInt(3,course.getYear()); + ps.setLong(1, course.getCoursesDomain().getCourseId()); + ps.setString(2, course.getSemester()); + ps.setLong(3, course.getUserDomain().getId()); + ps.setInt(4, course.getYear()); } @Override From d267cb4ef59b8aa3efa6997c5f043f5c7d585210 Mon Sep 17 00:00:00 2001 From: Taehyeon Jo <70999462+whxogus215@users.noreply.github.com> Date: Sat, 7 Sep 2024 13:07:42 +0900 Subject: [PATCH 3/5] =?UTF-8?q?refactor:=20extractData=EA=B0=80=20batchIns?= =?UTF-8?q?ert=EB=A5=BC=20=EC=82=AC=EC=9A=A9=ED=95=98=EB=8F=84=EB=A1=9D=20?= =?UTF-8?q?=EB=B3=80=EA=B2=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../service/CompletedCoursesService.java | 33 +++++++++---------- 1 file changed, 16 insertions(+), 17 deletions(-) diff --git a/src/main/java/com/example/gimmegonghakauth/service/CompletedCoursesService.java b/src/main/java/com/example/gimmegonghakauth/service/CompletedCoursesService.java index 205f53b..6ca58f7 100644 --- a/src/main/java/com/example/gimmegonghakauth/service/CompletedCoursesService.java +++ b/src/main/java/com/example/gimmegonghakauth/service/CompletedCoursesService.java @@ -7,6 +7,10 @@ import com.example.gimmegonghakauth.domain.CoursesDomain; import com.example.gimmegonghakauth.domain.UserDomain; import com.example.gimmegonghakauth.exception.FileException; +import java.io.IOException; +import java.util.ArrayList; +import java.util.List; +import lombok.extern.slf4j.Slf4j; import org.apache.commons.io.FilenameUtils; import org.apache.poi.hssf.usermodel.HSSFWorkbook; import org.apache.poi.ss.usermodel.DataFormatter; @@ -19,11 +23,8 @@ import org.springframework.transaction.annotation.Transactional; import org.springframework.web.multipart.MultipartFile; -import java.io.IOException; -import java.util.ArrayList; -import java.util.List; - @Service +@Slf4j public class CompletedCoursesService { private final CompletedCoursesDao completedCoursesDao; @@ -70,34 +71,34 @@ public List getExcelList(UserDetails userDetails) { @Transactional public void extractData(Sheet worksheet, DataFormatter dataFormatter, UserDomain userDomain) { + List completedCoursesList = new ArrayList<>(); // 저장할 엔티티 리스트 생성 for (int i = FIRST_ROW; i < worksheet.getPhysicalNumberOfRows(); i++) { //데이터 추출 Row row = worksheet.getRow(i); String yearAsString = dataFormatter.formatCellValue(row.getCell(1)); - int year = Integer.parseInt(yearAsString)%100; //년도 + int year = Integer.parseInt(yearAsString) % 100; //년도 String semester = dataFormatter.formatCellValue(row.getCell(2)); //학기 String courseIdAsString = dataFormatter.formatCellValue(row.getCell(3)); Long courseId = courseIdToLong(courseIdAsString); //학수번호 - CoursesDomain coursesDomain = coursesDao.findByCourseId( - courseId);// 학수번호를 기반으로 Courses 테이블 검색 + CoursesDomain coursesDomain = coursesDao.findByCourseId(courseId);// 학수번호를 기반으로 Courses 테이블 검색 if (coursesDomain == null) { continue; } - CompletedCoursesDomain data = CompletedCoursesDomain.builder().userDomain(userDomain) - .coursesDomain(coursesDomain) - .year(year) - .semester(semester) - .build(); - - completedCoursesDao.save(data); + CompletedCoursesDomain data = CompletedCoursesDomain.builder() + .userDomain(userDomain) + .coursesDomain(coursesDomain) + .year(year) + .semester(semester) + .build(); + completedCoursesList.add(data); // 엔티티를 리스트에 추가 } + completedCoursesDao.saveAll(completedCoursesList); // 한 번에 전체 엔티티 저장 } - //업로드 파일 검증 private void validateExcelFile(MultipartFile file, String extension) throws FileException { if (file.isEmpty()) { // 파일이 비어있으면 @@ -152,6 +153,4 @@ private Long courseIdToLong(String courseIdAsString) { } return Long.parseLong(courseIdAsString); } - - } From ea650c3069d09c4ccb0d7c86cc831fcfe3d93530 Mon Sep 17 00:00:00 2001 From: Taehyeon Jo <70999462+whxogus215@users.noreply.github.com> Date: Sat, 7 Sep 2024 13:21:33 +0900 Subject: [PATCH 4/5] =?UTF-8?q?chore:=20=EA=B9=83=20=EC=84=9C=EB=B8=8C?= =?UTF-8?q?=EB=AA=A8=EB=93=88=20=EB=B3=80=EA=B2=BD=EC=82=AC=ED=95=AD=20?= =?UTF-8?q?=EC=BB=A4=EB=B0=8B=20=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 45344c4293c0f5c17bc722cebc43dc59e10f3a6b 커밋 메시지 참고 --- src/main/resources/submodule-properties | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/resources/submodule-properties b/src/main/resources/submodule-properties index 920fd67..45344c4 160000 --- a/src/main/resources/submodule-properties +++ b/src/main/resources/submodule-properties @@ -1 +1 @@ -Subproject commit 920fd67beab95c36c8895217290a124b7058db0c +Subproject commit 45344c4293c0f5c17bc722cebc43dc59e10f3a6b From b9a71c82924a7e96679c5d63beae6002914e5680 Mon Sep 17 00:00:00 2001 From: Taehyeon Jo <70999462+whxogus215@users.noreply.github.com> Date: Mon, 9 Sep 2024 12:45:52 +0900 Subject: [PATCH 5/5] =?UTF-8?q?chore:=20=EA=B9=83=20=EC=84=9C=EB=B8=8C?= =?UTF-8?q?=EB=AA=A8=EB=93=88=20=EB=B3=80=EA=B2=BD=EC=82=AC=ED=95=AD=20?= =?UTF-8?q?=EC=BB=A4=EB=B0=8B=20=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - a67aecc 커밋 메시지 참고 --- src/main/resources/submodule-properties | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/resources/submodule-properties b/src/main/resources/submodule-properties index 45344c4..a67aecc 160000 --- a/src/main/resources/submodule-properties +++ b/src/main/resources/submodule-properties @@ -1 +1 @@ -Subproject commit 45344c4293c0f5c17bc722cebc43dc59e10f3a6b +Subproject commit a67aecca2e0d6bbc480396796e3827fa10933b16