queryForObject : 오로지 1개의 레코드만 가져온다 queryForList : 1개 이상의 레코드들을 가져온다
Object queryForObject(String sql, Object parameter, Object result) queryForObject( sql문,new BeanPropertyRowMapper<DTO>(DTO.class), result ) - DB로부터 1개의 레코드를 가져와 가바 객체에 저장한다 - 오직 한 개의 레코드만 반환되는 여부를 검사한다, 하나 이상의 레코드가 반환 되는 경우 예외처리된다. - 값이 없으면 null반환 - 하지만 이 함수를 사용할때는 Exception을 잘 파악하고 사용해야한다.일반적으로는 찾고자하는 값이 없을 경우 null을 return할 것이라 생각할 것이다. 하지만 위 함수는 record를 못찾으면 EmptyResultDataAccessException을 발생시킨다.
new BeanPropertyRowMapper<DTO>(DTO.class) -쿼리문을 통해 가져오는 결과값들에 해당하는 속성들과 매칭되는 변수를 가진 DTO에 설정해준다 -생성자를 통해서 설정을 하기 때문에 필요한 변수들 이외에 다른 변수들이 여러개가 함께 있어도 구분하여 사용하면 되므로 다른 변수들이 DTO에 같이 있어도 무관하다
자바 파일에 DB연결시 사용하는 예시 값이 없을시 예외처리를 해야하는데 하지 않으면 에러가 난다.
사용 결과
queryForList() - DB로부터 1개 이상의 레코드를 가져와 자바 객체의 List를 만드는데 사용한다.
여기서는 각jsp로 만든 페이지들을 이동하는 방법중에 sendRedirect와 forward를 이용하는 것을 할 것이다.
send~는 각각의 페이지의 rwquest와 response의 정보가 다르고 공유되지 않아서 aa.jsp에서 apple를 사과라 칭하고 bb.jsp에서 불러내면 bb.jsp에선 aa에서 일어난 일을 모르기 때문에 null값이 나온다. (앞의 페이지와 뒤의 페이지의 정보가 다른데)
forward는 앞의 페이지와 뒤의 페이지의 정보가 같다
네모는 데이터?가 공유하는 공간인데 저렇게 연결이 되면 bb의 request와 response는 사라지고 aa의 request와 response로 공유되서 사용된다.
그리고 aa에서 apple를 사과라고 하면 bb에서도 apple를 사과라고 인식할수 있다. 데이터가 공유된다는 이야기이다.
<input type="text" id="sample6_postcode" placeholder="우편번호">
<input type="button" onclick="sample6_execDaumPostcode()" value="우편번호 찾기"><br>
<input type="text" id="sample6_address" placeholder="주소"><br>
<input type="text" id="sample6_detailAddress" placeholder="상세주소">
<input type="text" id="sample6_extraAddress" placeholder="참고항목">
<script src="https://t1.daumcdn.net/mapjsapi/bundle/postcode/prod/postcode.v2.js"></script>
<script>
function sample6_execDaumPostcode() {
new daum.Postcode({
oncomplete: function(data) {
// 팝업에서 검색결과 항목을 클릭했을때 실행할 코드를 작성하는 부분.
// 각 주소의 노출 규칙에 따라 주소를 조합한다.
// 내려오는 변수가 값이 없는 경우엔 공백('')값을 가지므로, 이를 참고하여 분기 한다.
var addr = ''; // 주소 변수
var extraAddr = ''; // 참고항목 변수
//사용자가 선택한 주소 타입에 따라 해당 주소 값을 가져온다.
if (data.userSelectedType === 'R') { // 사용자가 도로명 주소를 선택했을 경우
addr = data.roadAddress;
} else { // 사용자가 지번 주소를 선택했을 경우(J)
addr = data.jibunAddress;
}
// 사용자가 선택한 주소가 도로명 타입일때 참고항목을 조합한다.
if(data.userSelectedType === 'R'){
// 법정동명이 있을 경우 추가한다. (법정리는 제외)
// 법정동의 경우 마지막 문자가 "동/로/가"로 끝난다.
if(data.bname !== '' && /[동|로|가]$/g.test(data.bname)){
extraAddr += data.bname;
}
// 건물명이 있고, 공동주택일 경우 추가한다.
if(data.buildingName !== '' && data.apartment === 'Y'){
extraAddr += (extraAddr !== '' ? ', ' + data.buildingName : data.buildingName);
}
// 표시할 참고항목이 있을 경우, 괄호까지 추가한 최종 문자열을 만든다.
if(extraAddr !== ''){
extraAddr = ' (' + extraAddr + ')';
}
// 조합된 참고항목을 해당 필드에 넣는다.
document.getElementById("sample6_extraAddress").value = extraAddr;
} else {
document.getElementById("sample6_extraAddress").value = '';
}
// 우편번호와 주소 정보를 해당 필드에 넣는다.
document.getElementById('sample6_postcode').value = data.zonecode;
document.getElementById("sample6_address").value = addr;
// 커서를 상세주소 필드로 이동한다.
document.getElementById("sample6_detailAddress").focus();
}
}).open();
}
</script>
예제코드를 보니 주소입력을 하는 칸도 포함이 되어 있었다. 본인이 만든 회원가입 html에 맞게 합쳐주면 된다.
그리고 스크립트 부분도 넣어주면되는데 나는 js파일을 따로 만들어 스크립트 부분을 모아놨다.
이렇게 스크립트 부분만 떼어내서 js파일에 넣어주고
회원가입 폼에는
이렇게 입력해서 경로?를 알려준다. 저 부분을 쓰지 않는다면 writeForm은 스크립트부분이 어디 있는지 알수 가 없다.
그리고 이제 DB에 회원을 저장하기 위해 테이블을 만들어주는데 주소부분은 다음에서 받은 코드와 같은 변수명으로 만들어준다.