3개의 테이블을 join 한 데이터 가져오기
// 클래스
public class ReportProductMember {
private Report report; // 하나의 클래스안의 멤버변수에 3개의 객체클래스 넣음
private Product product;
private Member member;
}
// 서블릿
// 반환형은 3개의 객체클래스를 담은 클래스이다
ReportProductMember rpm = new AdminService().reportProductMember(reportNo);
// 서비스
public ReportProductMember reportProductMember(String reportNo) {
Connection conn = getConnection();
ReportProductMember rpm = dao.reportProductMember(conn, reportNo);
close(conn);
return rpm;
}
// dao
public ReportProductMember reportProductMember(Connection conn, String reportNo) {
PreparedStatement pstmt = null;
ResultSet rs = null;
ReportProductMember r = null;
try {
pstmt = conn.prepareStatement(sql.getProperty("reportProductMember"));
pstmt.setString(1, reportNo);
rs = pstmt.executeQuery();
if(rs.next()) {
// 필요한 데이터들만 빌더해서 갖고옴
r = ReportProductMember.builder()
.report(Report.builder()
.reportNo(rs.getInt("REPORT_NO")).build())
.member(Member.builder()
.userId(rs.getString("USER_ID"))
.declareCount(rs.getInt("DECLARE_COUNT"))
.temperature(rs.getDouble("TEMPERATURE")).build()).build();
}
} catch (SQLException e) {
e.printStackTrace();
}finally {
close(rs);
close(pstmt);
}return r;
}
reportProductMember =
SELECT * FROM REPORT_BOARD
JOIN PRODUCT USING(PRODUCT_ID) JOIN USERS USING(USER_ID) WHERE REPORT_NO=?
// REPORT_BOARD 테이블, PRODUCT 테이블, USERS 테이블 -> 총 3가지 테이블을 조인
// jsp 화면
* 아래 코드는 위 출력되는 부분의 일부분 (해당 로우마다 체크박스들의 값들을 가져온 데이터의 게시글넘버로 지정)
<tr>
<td>
<input type="checkbox" id="memberChoice" name="deleteCheck" value="<%=b.getBoardNo()%>"/>
</td>
<td><%=b.getBoardNo()%></td>
<td><%=b.getBoardWriter()%></td>
<td><%=b.getBoardTitle()%></td>
<td><%=b.getBoardDate()%></td>
</tr>
<button id="userRemoveCheck" type="button" class="btn btn-danger">선택삭제</button>
// js 파일
$(document).ready(function() { // 레디함수
$("#userRemoveCheck").hide(); // 처음에는 선택삭제 버튼이 안보이게함
$("input:checkbox").on('click', function() { // 체크박스가 클릭되었을 때
let arr=[];
const cnt = document.querySelectorAll('input[name="deleteCheck"]:checked').length;
// 클릭된 체크박스 개수를 구함
if(cnt>=1){ // 체크된 체크박스 개수가 한개이상일때는 선택삭제 버튼만 보이게함
$("#userRemoveCheck").show();
$("#userRemoveAll").hide();
$(".updateBtn").hide();
$(".deleteBtn").hide();
}
else{
$("#userRemoveCheck").hide();
$("#userRemoveAll").show();
$(".updateBtn").show();
$(".deleteBtn").show();
}
});
});
$("#userRemoveCheck").click(e=>{
let arr = [];
$("input[name=deleteCheck]:checked").each((index,e)=>{ // 체크박스 클릭될때마다 체크된개수 파악
arr.push(e.value); // 배열에다 체크된 값들 저장 (ajax로 배열보내야함)
});
$.ajax({
url: "deleteCheckBoard",
data: {"arr": arr}, // 배열자체를 데이터로 보냄
success: function(result) {
if(result>=1){
alert("성공적으로 삭제되었습니다.");
location.replace("/semi-hifive/boardListAdmin.do");
}else{
alert("오류로 인해 삭제가 실패했습니다");
location.replace("/semi-hifive/boardListAdmin.do");
}
},
error: function() {
console.log("선택삭제실패");
}
})
})
// 서블릿
String arr[] = request.getParameterValues("arr[]"); // arr[] -> 배열로 넘기려면 []로 받아야함
String sql = "";
for(int i=0; i<arr.length; i++) {
sql+="'";
sql+=arr[i];
sql+="'";
if(i!=arr.length-1) {
sql+=",";
}
}
// 쿼리문에서 IN연산자 뒤에 데이터들을 넣기 위해서 각 데이터를 적을때 ,로 구분해줌
int result = new AdminService().deleteCheckReport(sql);
response.getWriter().print(result); // ajax의 result값을 반환하기 위해 작성
//dao
public int deleteCheckReport(Connection conn, String rsql) {
PreparedStatement pstmt = null;
int result = 0;
try {
pstmt = conn.prepareStatement(sql.getProperty("deleteCheckReport").replace("#data", rsql));
result = pstmt.executeUpdate();
} catch (SQLException e) {
e.printStackTrace();
} finally {
close(pstmt);
}
return result;
}
// 쿼리문
deleteCheckReport=DELETE FROM REPORT_BOARD WHERE REPORT_NO IN(#data)