🔷JDBC - DAO 작성 및 구현클래스 작성(isMember(id),isMember(id,pw))
- DAO 구현클래스 작성
package com.javateam.jdbc.member.dao.Impl; import java.sql.Connection; import java.sql.PreparedStatement; import java.sql.ResultSet; import java.sql.SQLException; import java.util.ArrayList; import java.util.List; import com.javateam.jdbc.member.dao.MemberDao; import com.javateam.jdbc.member.domain.MemberVo; import com.javateam.jdbc.member.util.DbUtil; /** * MemberDao의 구현 클래스(concrete class)<br><br> * * * 용례) MemberDao dao = MemberdaoImpl.getInstance();<br> * : 싱클턴(singleton:독신자) 패턴 적용 → 보안<br><br> * * @author mingki * */ public class MemberDaoImpl implements MemberDao { /** DAO 객체 : 싱클턴(singleton) 생성 패턴 적용*/ private static MemberDaoImpl instance = null; private MemberDaoImpl() {} /** * 싱글턴 객체(DAO singleton object) 생성 메서드 * * @return DAO 객체 */ public static final MemberDaoImpl getInstance() { // final : 오버라이드 금지 if(instance == null) { instance = new MemberDaoImpl(); } return instance; } @Override public boolean isMember(String memberId) { // 리턴(반환값) 처리 boolean result = false; // 실행 메서드명 String methodName = new Exception().getStackTrace()[0].getMethodName(); // DB 연결 Connection con = DbUtil.connect(); // SQL 처리 객체 PreparedStatement pstmt = null; // 결과셋 객체 ResultSet rs = null; // SQL 구문 // String sql = "SELECT * FROM member WHERE member_id =?"; // 1) // String sql = "SELECT count(1) FROM member WHERE member_id =?"; // (O) // 참고 : https://hue9010.github.io/db/select_count/ String sql = "SELECT count(*) FROM member WHERE member_id =?"; // SQL, 인자(선)처리 try { pstmt = con.prepareStatement(sql); pstmt.setString(1, memberId); // SQL 실행, 예외처리 rs = pstmt.executeQuery(); if(rs.next()) { // rs.getString("member_Id"); // 1) // 1 : 존재, 0 : 없음 result = rs.getInt(1) == 1 ? true : false; // result = true; // 1) } } catch (SQLException e) { System.out.println(methodName + " : " + e.getMessage()); // 자원반납 }finally { DbUtil.close(con, pstmt, rs); } // 리턴(반환) return result; } @Override public String isMember(String memberId, String memberPassword) { // 리턴(반환값) 처리 String result = ""; // 실행 메서드명 String methodName = new Exception().getStackTrace()[0].getMethodName(); // DB 연결 Connection con = DbUtil.connect(); // SQL 처리 객체 PreparedStatement pstmt = null; // 결과셋 객체 ResultSet rs = null; // SQL 구문 String sql = "SELECT count(*) FROM member WHERE member_id = ? AND member_password= ?"; // SQL, 인자 (선)처리 try { pstmt = con.prepareStatement(sql); pstmt.setString(1, memberId); pstmt.setString(2, memberPassword); // SQL 실행, 예외처리 // hint ) isMember(String memberId)활용 // 다중 조건 활용 // 1) 회원 여부 점검 // 1-1) 회원 여부 일치 => 패스워드 존재여부 점검 // 2) 패스워드 일치 여부 점검 // 2-1) 패스워드 일치할 경우 메시징 // 2-2) 패스워드 불일치할 경우 메시징 // 1-2) 회원 여부 불일치 => 메시징처리 // isMember 재활용 if(this.isMember(memberId)== true) {// 1-1) // 2) rs = pstmt.executeQuery(); if(rs.next()) { result = rs.getInt(1) == 1 ? "일치하는 회원 정보가 존재합니다" :"회원 패스워드가 일치하지 않습니다"; } }else { // 1-2 result = "회원 아이디가 존재하지 않습니다"; } // 내가 작성한 코드 => 잘못됨 // if(rs.next()) { // if(rs.getInt(1)==1) { // if(rs.getInt(2)==1) { // result += "일치하는 회원 정보가 존재합니다"; // }else if(rs.getInt(2)==0) { // result += "회원 패스워드가 일치하지 않습니다"; // } // }else if(rs.getInt(1)==0) { // result += "회원 아이디가 존재하지 않습니다"; // } // } } catch (SQLException e) { System.out.println(methodName + " : " + e.getMessage()); // 자원 반납 }finally { DbUtil.close(con, pstmt, rs); } // 리턴(반환) return result; } }
-
isMember(id) 테스트 클래스
package com.javateam.jdbc.member.test; import com.javateam.jdbc.member.dao.MemberDao; import com.javateam.jdbc.member.dao.Impl.MemberDaoImpl; /** * isMember 단위 테스트 케이스<br> * : 회원 여부 점검<br><br> * * @author migki * */ public class isMembeTest1 { public static void main(String[] args) { // DAO 객체 생성 MemberDao dao= MemberDaoImpl.getInstance(); // 존재하는 아이디와 존재하지 않는 아이디 두가지 경우를 테스트 // 1) 존재하는 아이디로 점검 System.out.println("회원 아이디 존재 여부(java): " + dao.isMember("java")); // 2) 존재하지 않는 아이디로 점검 System.out.println("회원 아이디 존재 여부(spring) : " + dao.isMember("spring")); // 내가 작성한 코드 // String result = dao.isMemberByMemberId("mini2") == true ? // "중복된 아이디가 있습니다" : "중복 없음"; // System.out.println(result); } }
▶ 출력 화면
- isMember(id,pw) 테스트 클래스
package com.javateam.jdbc.member.test; import com.javateam.jdbc.member.dao.MemberDao; import com.javateam.jdbc.member.dao.Impl.MemberDaoImpl; /** * isMember(id,pw) 단위 테스트 케이스<br> * : 회원 인증 여부 점검 테스트<br><br> * * @author migki * */ public class isMembeTest2 { public static void main(String[] args) { // DAO 객체 생성 MemberDao dao = MemberDaoImpl.getInstance(); System.out.println("회원 id,pw 일치할 경우: " + dao.isMember("java", "1234")); System.out.println("회원 id존재 but pw 불일치 할 경우 : " + dao.isMember("java", "1111")); System.out.println("회원 아이디 (spring) 존재하지 않을 경우 : " + dao.isMember("spring", "1111")); // 내가 작성한 코드 // String result = dao.isMemberByMemberId("mini2") == true ? // "중복된 아이디가 있습니다" : "중복 없음"; // System.out.println(result); } }
▶ 출력 화면