728x90
반응형
어떠한 정보를 DB에 저장하고 싶을 때 여러 가지 방법으로 중복체크를 할 수 있지만
그중 나름 간단하면서도 쉬운 방법은 form을 submit 할 시 중복체크를 하는 것이다.
그렇게 하기 위해서는 일단 자바스크립트 단에서 form의 값을 받아서 ajax를 통해 컨트롤러에 전달해야 한다.
아래는 샘플 코드이다. 필자는 기본 alert 대신 SweetAlert2라는 라이브러리를 사용했다.
1. 데이터 추가/수정 관련 자바스크립트
var 넣을 값을 담은 변수 = {
넣을 값
};
$.ajax({
type: "POST",
url: "/URL 경로",
data: 넣을 값을 담은 변수,
success: function (data) {
if (data === 1) {
Swal.fire({
icon: 'success',
html: '000 추가되었습니다.',
showConfirmButton: true,
confirmButtonColor: '#3085d6',
confirmButtonText: '확인'
}), window.location.href = '/추가 후 보내고 싶은 경로';
} else {
Swal.fire({
icon: 'error',
html: '중복된 값이 있는지 다시 확인해주세요',
showConfirmButton: false,
showCancelButton: true,
cancelButtonColor: '#F63543',
cancelButtonText: '확인'
});
}
},
});
2. 컨트롤러
보이다시피 중복체크 관련하여 호출한 서비스의 return 값이 1보다 적은 경우
데이터를 추가하는 함수를 호출하고 1이라는 값을 return 하며,
이 외의 경우에는 2라는 값으로 return 하는 함수이다.
@ResponseBody
@PostMapping("/아까 그 경로")
public Integer 변수명 (@ModelAttribute Dto명 Dto참조변수) {
if(서비스 참조변수.중복체크 함수명(Dto참조변수)<1) {
서비스 참조변수.추가하는 함수명(Dto참조변수);
return 1;
}else{
return 2;
}
}
3. 서비스
Dto에서 중복체크를 하고싶은 칼럼의 값을 빼내서 바인딩 변수= 매개변수에 담고그 매개변수를 리포지토리로 보내는 로직이다.
public Integer 중복체크 함수명(Dto명 Dto참조변수) {
데이터타입 변수명(매개변수) = Dto참조변수.get칼럼명();
return 리포지토리 참조변수.중복체크 함수명(매개변수);
}
4. 리포지토리
where 조건절에 부합하는 모든 것들을 count 해주는 로직으로 하나라도 중복이 있으면 return 값은 1 이상이 되게 된다.
함수명의 데이터 타입으로 Integer 대신 Boolean을 사용해도 괜찮다.
@Transactional
@Query(value = "SELECT COUNT(*) FROM 테이블명 " +
"WHERE (중복 체크하고 싶은 칼럼명=:매개변수(바인딩 변수)", nativeQuery = true)
Integer 중복체크 함수명(데이터 타입 매개변수);
5. 다시 컨트롤러
@ResponseBody
@PostMapping("/아까 그 경로")
public Integer 변수명 (@ModelAttribute Dto명 Dto참조변수) {
if(서비스 참조변수.중복체크 함수명(Dto참조변수)<1) {
서비스 참조변수.추가하는 함수명(Dto참조변수);
return 1;
}else{
return 2;
}
}
6. 다시 자바스크립트
리턴받은 값이 1일 경우 추가됐다는 메세지를 출력하고
추가된 것이 조회되는 view로 전송하며
리턴받은 값이 1이 아닐 경우 중복이라는 메세지를 출력하며
그대로 멈추는 로직이다.
var 넣을 값을 담은 변수 = {
넣을 값
};
$.ajax({
type: "POST",
url: "/URL 경로",
data: 넣을 값을 담은 변수,
success: function (data) {
if (data === 1) {
Swal.fire({
icon: 'success',
html: '000 추가되었습니다.',
showConfirmButton: true,
confirmButtonColor: '#3085d6',
confirmButtonText: '확인'
}), window.location.href = '/추가 후 보내고 싶은 경로';
} else {
Swal.fire({
icon: 'error',
html: '중복된 값이 있는지 다시 확인해주세요',
showConfirmButton: false,
showCancelButton: true,
cancelButtonColor: '#F63543',
cancelButtonText: '확인'
});
}
},
});
7. 끝
728x90
반응형
'개발자 전향 프로젝트' 카테고리의 다른 글
[마이바티스+오라클] 검색할 때 종종 막히는 바인딩 변수 (0) | 2022.11.07 |
---|---|
프레임워크와 라이브러리의 차이가 뭔가요? [ 면접 질문 ] (0) | 2022.10.29 |
[JAVA] JPA 활용법 -1 (QueryDSL 적용해보기) (0) | 2022.10.24 |
유효성 검사(?)로 클라이언트를 막아보자 - 1 (0) | 2022.10.20 |
소소한 팁 -2 제 버튼은 왜 submit이 아닌데 submit이 되죠? (0) | 2022.10.20 |