Skip to content

Commit 2b27e86

Browse files
committed
feat: 채팅 저장을 jdbc template을 이용한 bulk insert 변경
1 parent b6c186a commit 2b27e86

File tree

2 files changed

+41
-1
lines changed

2 files changed

+41
-1
lines changed

lime-domain/src/main/java/com/programmers/lime/domains/chat/implementation/ChatAppender.java

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,10 +3,12 @@
33
import java.util.List;
44
import java.util.stream.Collectors;
55

6+
import org.springframework.jdbc.core.JdbcTemplate;
67
import org.springframework.stereotype.Component;
78

89
import com.programmers.lime.domains.chat.domain.Chat;
910
import com.programmers.lime.domains.chat.model.ChatInfo;
11+
import com.programmers.lime.domains.chat.repository.ChatJdbcTemplateRepository;
1012
import com.programmers.lime.domains.chat.repository.ChatRepository;
1113

1214
import lombok.RequiredArgsConstructor;
@@ -17,6 +19,8 @@ public class ChatAppender {
1719

1820
private final ChatRepository chatRepository;
1921

22+
private final ChatJdbcTemplateRepository chatJdbcTemplateRepository;
23+
2024
public void appendChat(
2125
final ChatInfo chatInfo
2226
) {
@@ -45,6 +49,6 @@ public void appendChats(
4549
.build()
4650
).collect(Collectors.toList());
4751

48-
chatRepository.saveAll(chats);
52+
chatJdbcTemplateRepository.bulkInsertChats(chats);
4953
}
5054
}
Lines changed: 36 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,36 @@
1+
package com.programmers.lime.domains.chat.repository;
2+
3+
import java.sql.PreparedStatement;
4+
import java.sql.SQLException;
5+
import java.sql.Timestamp;
6+
import java.util.List;
7+
8+
import org.springframework.jdbc.core.JdbcTemplate;
9+
import org.springframework.stereotype.Repository;
10+
import org.springframework.transaction.annotation.Transactional;
11+
12+
import com.programmers.lime.domains.chat.domain.Chat;
13+
14+
import lombok.RequiredArgsConstructor;
15+
16+
@Repository
17+
@RequiredArgsConstructor
18+
public class ChatJdbcTemplateRepository {
19+
20+
private static final String INSERT_SQL = "INSERT INTO chats (chat_room_id, member_id, message, send_at, chat_type) VALUES (?, ?, ?, ?, ?)";
21+
22+
private final JdbcTemplate jdbcTemplate;
23+
24+
@Transactional
25+
public void bulkInsertChats(final List<Chat> chats) {
26+
jdbcTemplate.batchUpdate(INSERT_SQL, chats, 50, this::prepareStatement);
27+
}
28+
29+
private void prepareStatement(final PreparedStatement ps, final Chat chat) throws SQLException {
30+
ps.setLong(1, chat.getChatRoomId());
31+
ps.setLong(2, chat.getMemberId());
32+
ps.setString(3, chat.getMessage());
33+
ps.setTimestamp(4, Timestamp.valueOf(chat.getSendAt()));
34+
ps.setString(5, chat.getChatType().toString());
35+
}
36+
}

0 commit comments

Comments
 (0)