DAO (Data Access Object)
DB의 데이터를 조작, 관리하는 기능을 전담하기 위해 만든 object를 뜻한다.
DTO (Data Transfer Object)
데이터 교환을 위한 object를 뜻한다. 일반적으로 setter getter 메소드를 가진다.
MainClass12 (DELETE기능과 작업성공여부 리턴)
package test.main;
import java.sql.Connection;
import java.sql.PreparedStatement;
import test.util.DBConnect;
public class MainClass12 {
public static void main(String[] args) {
//삭제할 회원의 번호라고 가정하자
int num=2;
//회원의 정보를 삭제하고 성공여부를 리턴 받는다.
boolean isSuccess = delete(num);
//성공이냐 실패냐에 따라 선택적인 작업을 할수가 있다.
if(isSuccess) {
System.out.println(num+" 번 회원을 삭제 했습니다.");
}else {
System.out.println(num+" 번 회원 삭제 실패!");
}
}
//회원 한명의 정보를 삭제하는 메소드
public static boolean delete(int num) {
Connection conn=null;
PreparedStatement pstmt=null;
//변화된(추가, 수정, 삭제) 행의 갯수를 담을 지역변수를 미리 만들어 둔다.
int updatedRowCount=0;
try {
//DBConnect 객체를 이용해서 Connection 객체의 참조값을 얻어온다.
conn=new DBConnect().getConn();
//실행할 sql 문
String sql="DELETE FROM member"
+ " WHERE num=?";
//PreparedStatement 객체 얻어내기
pstmt=conn.prepareStatement(sql);
//? 바인딩 할게 있으면 바인딩 한다.
pstmt.setInt(1, num);
//실행후 메소드가 리턴해주는 변화된 행의 갯수를 지역변수에 담는다.
updatedRowCount=pstmt.executeUpdate();
System.out.println("회원정보를 삭제했습니다.");
}catch(Exception e) {
e.printStackTrace();
}finally {
try {
if(pstmt!=null)pstmt.close();
if(conn!=null)conn.close();
}catch(Exception e) {}
}
//만일 변화된 행의 갯수가 0보다 크면
if(updatedRowCount > 0) {
//작업 성공의 의미이기 때문에 true 를 리턴하고
return true;
}else {
//작업이 실패면 false 를 리턴한다.
return false;
}
}
}
해당 번호의 회원 정보를 삭제하는(DELETE) 기능의 코드를 작성하였고 기존의 DELETE 코드와 다른 점은 작업의 성공여부를 리턴받는 것이다.
코드 작성에 앞서 작업의 성공 여부는 리턴 타입으로 알 수 있는 경우가 많고 특히 boolean type으로 리턴하는 경우가 많다.
예시에서는 MainClass10의 뒷부분 코드를 그대로 가져와 updateRowCount 부분을 추가하였다. 작성법에 유의해야 한다.
MemberDao (DAO 만들기)
DAO는 data access object의 약자로 DB의 데이터를 조작, 관리하는 기능을 전담하기 위해 만든 object를 뜻한다.
서비스를 만든다고 가정해보자. 회원 한명의 정보를 불러오기, 삭제하기, 수정하기 작업 등을 code의 여러 부분에서 해야하는 경우도 있을 것이다. 이때 DAO를 사용하게 된다.
예시에서는 INSERT, UPDATE, DELETE 3가지 기능을 담았다.
package test.dao;
import java.sql.Connection;
import java.sql.PreparedStatement;
import test.dto.MemberDto;
import test.util.DBConnect;
public class MemberDao {
//회원 한명의 정보를 추가하고 성공여부를 리턴하는 메소드
public boolean insert(MemberDto dto) {
Connection conn=null;
PreparedStatement pstmt=null;
//변화된(추가, 수정, 삭제) 행의 갯수를 담을 지역변수를 미리 만들어 둔다.
int updatedRowCount=0;
try {
//DBConnect 객체를 이용해서 Connection 객체의 참조값을 얻어온다.
conn=new DBConnect().getConn();
//실행할 sql 문
String sql="INSERT INTO member"
+ " (num, name, addr)"
+ " VALUES(member_seq.NEXTVAL, ?, ?)";
//PreparedStatement 객체 얻어내기
pstmt=conn.prepareStatement(sql);
//? 바인딩 할게 있으면 바인딩 한다.
pstmt.setString(1, dto.getName());
pstmt.setString(2, dto.getAddr());
//실행후 메소드가 리턴해주는 변화된 행의 갯수를 지역변수에 담는다.
updatedRowCount=pstmt.executeUpdate();
}catch(Exception e) {
e.printStackTrace();
}finally {
try {
if(pstmt!=null)pstmt.close();
if(conn!=null)conn.close();
}catch(Exception e) {}
}
//만일 변화된 행의 갯수가 0보다 크면
if(updatedRowCount > 0) {
//작업 성공의 의미이기 때문에 true 를 리턴하고
return true;
}else {
//작업이 실패면 false 를 리턴한다.
return false;
}
}
//회원 한명의 정보를 수정하고 성공여부를 리턴하는 메소드
public boolean update(MemberDto dto) {
Connection conn=null;
PreparedStatement pstmt=null;
//변화된(추가, 수정, 삭제) 행의 갯수를 담을 지역변수를 미리 만들어 둔다.
int updatedRowCount=0;
try {
//DBConnect 객체를 이용해서 Connection 객체의 참조값을 얻어온다.
conn=new DBConnect().getConn();
//실행할 sql 문
String sql="UPDATE member"
+ " SET name=?, addr=?"
+ " WHERE num=?";
//PreparedStatement 객체 얻어내기
pstmt=conn.prepareStatement(sql);
//? 바인딩 할게 있으면 바인딩 한다.
pstmt.setString(1, dto.getName());
pstmt.setString(2, dto.getAddr());
pstmt.setInt(3, dto.getNum());
//실행후 메소드가 리턴해주는 변화된 행의 갯수를 지역변수에 담는다.
updatedRowCount=pstmt.executeUpdate();
}catch(Exception e) {
e.printStackTrace();
}finally {
try {
if(pstmt!=null)pstmt.close();
if(conn!=null)conn.close();
}catch(Exception e) {}
}
//만일 변화된 행의 갯수가 0보다 크면
if(updatedRowCount > 0) {
//작업 성공의 의미이기 때문에 true 를 리턴하고
return true;
}else {
//작업이 실패면 false 를 리턴한다.
return false;
}
}
//회원 한명의 정보를 삭제하고 성공여부를 리턴하는 메소드
public boolean delete(int num) {
Connection conn=null;
PreparedStatement pstmt=null;
//변화된(추가, 수정, 삭제) 행의 갯수를 담을 지역변수를 미리 만들어 둔다.
int updatedRowCount=0;
try {
//DBConnect 객체를 이용해서 Connection 객체의 참조값을 얻어온다.
conn=new DBConnect().getConn();
//실행할 sql 문
String sql="DELETE FROM member"
+ " WHERE num=?";
//PreparedStatement 객체 얻어내기
pstmt=conn.prepareStatement(sql);
//? 바인딩 할게 있으면 바인딩 한다.
pstmt.setInt(1, num);
//실행후 메소드가 리턴해주는 변화된 행의 갯수를 지역변수에 담는다.
updatedRowCount=pstmt.executeUpdate();
}catch(Exception e) {
e.printStackTrace();
}finally {
try {
if(pstmt!=null)pstmt.close();
if(conn!=null)conn.close();
}catch(Exception e) {}
}
//만일 변화된 행의 갯수가 0보다 크면
if(updatedRowCount > 0) {
//작업 성공의 의미이기 때문에 true 를 리턴하고
return true;
}else {
//작업이 실패면 false 를 리턴한다.
return false;
}
}
}
MemberDao 중복되는 부분
Connection conn=null;
PreparedStatement pstmt=null;
//변화된(추가, 수정, 삭제) 행의 갯수를 담을 지역변수를 미리 만들어 둔다.
int updatedRowCount=0;
try {
//DBConnect 객체를 이용해서 Connection 객체의 참조값을 얻어온다.
conn=new DBConnect().getConn();
//실행할 sql 문
String sql="";
//PreparedStatement 객체 얻어내기
pstmt=conn.prepareStatement(sql);
//? 바인딩 할게 있으면 바인딩 한다.
//실행후 메소드가 리턴해주는 변화된 행의 갯수를 지역변수에 담는다.
updatedRowCount=pstmt.executeUpdate();
}catch(Exception e) {
e.printStackTrace();
}finally {
try {
if(pstmt!=null)pstmt.close();
if(conn!=null)conn.close();
}catch(Exception e) {}
}
//만일 변화된 행의 갯수가 0보다 크면
if(updatedRowCount > 0) {
//작업 성공의 의미이기 때문에 true 를 리턴하고
return true;
}else {
//작업이 실패면 false 를 리턴한다.
return false;
}
INSERT, UPDATE, DELETE
이 3가지 작업은 코드 작성 형식이 비슷하다. 위의 형식에서 sql문과 바인딩할 부분만 추가해주면 된다.
MainClass13 (DAO, DTO 활용하여 INSERT 코드 만들기)
회원 정보를 MemberDao 객체를 이용해서 DB에 저장하고
성공이면 "회원정보를 추가 했습니다", 실패면 "추가 실패!" 를 콘솔창에 출력하는 code를 작성해 보세요.
package test.main;
import test.dao.MemberDao;
import test.dto.MemberDto;
public class MainClass13 {
public static void main(String[] args) {
String name="햄버거";
String addr="맥도날드";
//추가할 회원의 정보를 MemberDto 객체를 생성해서 담는다.
MemberDto dto=new MemberDto();
dto.setName(name);
dto.setAddr(addr);
//MemberDao 객체를 생성해서
MemberDao dao=new MemberDao();
//insert() 메소드를 이용해서 회원의 정보를 추가하고 성공 여부를 리턴 받는다.
boolean isSuccess = dao.insert(dto);
if(isSuccess) {
System.out.println(" 회원정보를 추가 했습니다");
}else {
System.out.println("추가 실패!");
}
}
}
MainClass14 (DAO, DTO 활용하여 UPDATE 코드 만들기)
회원 정보를 MemberDao 객체를 이용해서 DB 내용을 수정하고
성공이면 "회원정보를 수정했습니다", 실패면 "수정 실패!" 를 콘솔창에 출력하는 code를 작성해 보세요.
package test.main;
import test.dao.MemberDao;
import test.dto.MemberDto;
public class MainClass14 {
public static void main(String[] args) {
int num=7;
String name="호빵";
String addr="GS25";
//추가할 회원의 정보를 MemberDto 객체를 생성해서 담는다.
MemberDto dto=new MemberDto();
dto.setNum(num);
dto.setName(name);
dto.setAddr(addr);
//MemberDao 객체를 생성해서
MemberDao dao=new MemberDao();
//insert() 메소드를 이용해서 회원의 정보를 추가하고 성공 여부를 리턴 받는다.
boolean isSuccess = dao.update(dto);
if(isSuccess) {
System.out.println("회원정보를 수정 했습니다");
}else {
System.out.println("수정 실패!");
}
}
}
MemberDto dto=new MemberDto(num, name, addr);
예시에서 dto객체에 값을 담을때 setter 메소드를 사용하지 않고 코드를 작성하는 것도 가능하다.
MainClass15 (DAO, DTO 활용하여 DELETE 코드 만들기)
특정 회원 정보를 DB에서 삭제하고
성공이면 "회원정보를 삭제 했습니다", 실패면 "삭제 실패!" 를 콘솔창에 출력하는 code를 작성해 보세요.
package test.main;
import test.dao.MemberDao;
import test.dto.MemberDto;
public class MainClass15 {
public static void main(String[] args) {
int num=6;
//MemberDao 객체를 생성해서
MemberDao dao=new MemberDao();
//insert() 메소드를 이용해서 회원의 정보를 추가하고 성공 여부를 리턴 받는다.
boolean isSuccess = dao.delete(num);
if(isSuccess) {
System.out.println("회원정보를 삭제 했습니다");
}else {
System.out.println("삭제 실패!");
}
}
}
boolean isSuccess=new MemberDao().delete(num);
객체를 변수에 담지 않고 일회성으로 사용하는 것도 가능하다.
'java' 카테고리의 다른 글
Step17_JBDC (회원정보관리 Frame, PropertyChangeListener) (0) | 2022.08.09 |
---|---|
Step17_JBDC (MemberDao SELECT) (0) | 2022.08.08 |
Step17_JBDC (DML 응용 예제, JFrame 응용 예제) (0) | 2022.08.05 |
Step17_JBDC (JAVA DML 응용) (0) | 2022.08.05 |
Step17_JBDC 예제 (0) | 2022.08.05 |