본문 바로가기

🌱JAVA/시나리오 개발

<SpringBoot> insert2개 수행, 1개는 그냥 insert, 1개는 Admin 붙여서 insert

728x90
반응형

# 시나리오는 아래와 같다.

- 사용자가 insert 수행 시 제목과 내용을 입력하도록 되어 있다. ID는 자동으로 증가하는 방식이고 PK로 되어 있다.

여기서 사용자가 제목과 내용을 입력 시 1개가 INSERT 되는 것이 아닌 2개가 INSERT 되고 1개는 그냥 INSERT가 수행되고 나머지 1개에는 제목과 내용에 Admin이라는 문구가 추가되어 INSERT 하는 시나리오이다.

- 실행 화면은 아래와 같다.

MP4 버전

코드 설명 (매우 조잡한거 같음.)

@Slf4j
@Controller
@Component
public class HomeworkController {

    @Autowired
    ArticleRepository articleRepository;

    @PostMapping("/articles/create/homework")
    public String createArticle(ArticleForm form) {
        Article article = form.toEntity();
        Article saved = articleRepository.save(article); // insert 수행 1차
        // id값 가져온다.
        long get_id = saved.getId();
        // content값 가져온다.
        String get_content = saved.getContent() + " Admin";
        // title값 가져온다.
        String get_title = saved.getTitle() + " Admin";
        // get_id값과 저장된 getId값이 같다면 수행한다. 같을수 밖에 없음.
        if (get_id == saved.getId()) {
        	// insert시 pk 중복을 피하기위해 get_Id값에 +1을 해준다.
            long number = saved.getId() + 1;
            // number라는 변수에 getId값이+1 되었기 때문에 pk 중복은 발생하지 않고,
            // 나머지 데이터는 위에서 변수에 저장된 데이터를 그대로 insert 한다.
            articleRepository.insert_get_id(number, get_content, get_title); // insert 수행 2차
        } else {
            log.info("값이 정확하지 않습니다. 값을 확인해 주세요.");
        }
        return "redirect:/articles/" + saved.getId(); // 작업 후 결과값을 보여주기 위한 return 값 (예: 11 title 내용 content 내용)
    }
}

Repository, 쿼리는 걍 네이티브 쿼리 씀.

    @Transactional
    @Modifying
    @Query(value = "insert into Article (id, content, title) values (:number, :get_content, :get_title)", nativeQuery = true)
    int insert_get_id(@Param("number") Long number,
                      @Param("get_content") String get_content,
                      @Param("get_title") String get_title);

어쨌든, 실행은 된다.

 

- 끝 -

728x90
반응형