2019. 4. 11. 10:57ㆍJAVA
----------------------------------VO / DAO, DAO, Service-----------------------------
VO / DAO 패턴
VO(Value Object)
- 데이터베이스의 한 레코드를 담는 객체
- 필드, 생성자, Getter/Setter 메소드 구성
- 레코드(행)의 갯수만큼 생성해서 사용한다.
- (필드 클래스)
* VO객체, Domain객체, DTO객체, 자바빈즈 라고 부른다.
DAO(Database Access Object)
- Database Access 작업을 담당하는 객체
- 추가(Insert) / 삭제(Delete) / 변경(Update) / 조회(Select) 작업과 관련된 메소드들 구성
* CRUD 기능을 구현한다.
* Create, Retrieve, Update, Delete
- 업무로직이 존재하디 않는다. (if, for 등 만 사용하는 다른 메소드)
* 단순한 JDBC 코딩만 존재한다.
* ibatis / mybatis / hibernate / jpa 등의 DB Access 작업을
단순화시켜주는 프레임워크를 활용해서 주로 개발된다.
- Persistence Layer 라 한다.
Service
- 업무로직을 관련된 작업을 담당하는 객체
- 사용자가 입력한 값을 전달받아서 적절한 업무로직을 수행하고
업무로직의 수행결과를 DAO를 활용해서 DataBase에 영구적으로 보관한다.
* 업무로직은 보통 1번 이상의 DB Access작업을 필요로 한다.
* Service객체의 메소드들은 DAO에 구현된 DB Access작업을 활용해서
업무로직에 필요한 정보를 획득하거나, 업무로직의 수행결과를 DB에 반영한다.
- Service Layer 라 한다.
Persentation Layer
- 서비스를 사용하는 레이어
* App 자바 파일 등
예시 1-1) 우선 db.utils 패키지를 만들고 그안에 ConnectionUtils.java 파일을 만든다.==========
import java.sql.Connection;
import java.sql.DriverManager;
public class ConnectionUtils {
public static Connection getConnection() throws Exception {
Class.forName("oracle.jdbc.OracleDriver");
Connection conn = DriverManager.getConnection("jdbc:oracle:thin:@localhost:1521:xe", "hr", "zxcv1234");
return conn;
}
}
예시 1-2) UserDAO========================================================
import db.utils.ConnectionUtils;
public class UserDAO {
// 사용자정보 변경하기
public void updateUser(UserVO user) throws Exception {
String sql = "update store_user set user_name = ?, user_pwd = ?, user_phone = ?, user_email = ?, user_point = ? where user_id = ?";
Connection conn = ConnectionUtils.getConnection();
PreparedStatement ptmt = conn.prepareStatement(sql);
ptmt.setString(1, user.getName());
ptmt.setString(2, user.getPwd());
ptmt.setString(3, user.getPhone());
ptmt.setString(4, user.getEmail());
ptmt.setInt(5, user.getPoint());
ptmt.setString(6, user.getId());
ptmt.executeUpdate();
ptmt.close();
conn.close();
}
// 새로운 사용자 정보 추가하기
public void addUser(UserVO user) throws Exception {
String sql = "insert into ( user_id, user_name, user_pwd, user_phone, user_emaile, user_point ) "+
"values (?, ?, ?, ?, ? , 0)";
Connection conn = ConnectionUtils.getConnection();
PreparedStatement ptmt = conn.prepareStatement(sql);
ptmt.setString(1, user.getId());
ptmt.setString(2, user.getName());
ptmt.setString(3, user.getPwd());
ptmt.setString(4, user.getPhone());
ptmt.setString(5, user.getEmail());
ptmt.executeUpdate();
ptmt.close();
conn.close();
}
// 지정된 아이디에 해당하는 사용자 정보 삭제하기
public void deleteUser(String id) throws Exception{
String sql = "delete from store_user where user_id = ?";
Connection con = ConnectionUtils.getConnection();
PreparedStatement ptmt = con.prepareStatement(sql);
ptmt.setString(1, id);
ptmt.executeUpdate();
ptmt.close();
con.close();
}
// 지정된 이름에 해당하는 사용자 정보 조회하기
public ArrayList searchUserByName(String name) throws Exception{
ArrayList users = new ArrayList();
String sql = "select * from store_user where = ?";
Connection conn = ConnectionUtils.getConnection();
PreparedStatement ptmt = conn.prepareStatement(sql);
ptmt.setString(1, name);
ResultSet rs = ptmt.executeQuery();
while(rs.next()) {
UserVO user = new UserVO();
user.setId(rs.getString("user_id"));
user.setName(rs.getString("user_name"));
user.setPwd(rs.getString("user_pwd"));
user.setPhone(rs.getString("user_phone"));
user.setEmail(rs.getString("user_email"));
user.setPoint(rs.getInt("user_point"));
user.setCreateDate(rs.getDate("user_create_date"));
users.add(user);
}
rs.close();
ptmt.close();
conn.close();
return users;
}
// 저정된 아이디에 해당하는 사용자 정보 조회하기
public UserVO findUserById(String id) throws Exception{
UserVO user = null;
// 하나만 조회면 초기값을 null로 한다.
String sql = "select * from store_user where user_id = ? ";
Connection conn = ConnectionUtils.getConnection();
PreparedStatement ptmt = conn.prepareStatement(sql);
ptmt.setString(1, id);
ResultSet rs = ptmt.executeQuery();
while(rs.next()) {
user = new UserVO();
// next로 커서를 내리는데 그위치에 있으면 null값인걸 UserVO로 새로 만든다.
user.setId(rs.getString("user_id"));
user.setName(rs.getString("user_name"));
user.setPwd(rs.getString("user_pwd"));
user.setPhone(rs.getString("user_phone"));
user.setEmail(rs.getString("user_email"));
user.setPoint(rs.getInt("user_point"));
user.setCreateDate(rs.getDate("user_create_date"));
}
rs.close();
ptmt.close();
conn.close();
// Service에서 user를 get하면 값을 사용
return user;
}
// 전체 사용자 정보 조회하기
public ArrayList getAllUsers() throws Exception{
ArrayList users = new ArrayList();
// 값을 담아 Service에 넘겨주기위해 ArrayList사용
String sql = "select * from store_user order by user_id ";
Connection conn = ConnectionUtils.getConnection();
PreparedStatement ptmt = conn.prepareStatement(sql);
ResultSet rs = ptmt.executeQuery();
while(rs.next()) {
// 바로담기가 가능하다.
UserVO user = new UserVO();
user.setId(rs.getString("user_id"));
user.setName(rs.getString("user_name"));
user.setPwd(rs.getString("user_pwd"));
user.setPhone(rs.getString("user_phone"));
user.setEmail(rs.getString("user_email"));
user.setPoint(rs.getInt("user_point"));
user.setCreateDate(rs.getDate("user_create_date"));
users.add(user);
}
rs.close();
ptmt.close();
conn.close();
return users;
}
}
예시1-3) UserService.java====================================
import java.util.ArrayList;
public class UserService {
UserDAO userDao = new UserDAO();
// 사용자 등록
public void addNewUser(UserVO user) throws Exception {
// 이미 등록된 사용자인지 조회
UserVO dbUser = userDao.getUserById(user.getId());
if (dbUser != null) {
throw new Exception("동일한 아이디를 가진 사용자가 이미 존재합니다.");
}
userDao.addUser(user);
}
// 사용자 전체 조회
public ArrayList getAllUsers() throws Exception{
ArrayList users = userDao.getAllUsers();
return users;
}
// 사용자 이름으로 조회
public ArrayList searchUsers(String name) throws Exception{
ArrayList users = userDao.searchUserByName(name);
if ( users == null) {
throw new Exception("["+name+"]에 해당하는 이름이 없습니다.");
}
// 검색된 정보가 있을 경우에만 정보를 반환함
return users;
}
// 사용자 아이디로 조회
public UserVO findUserById(String id) throws Exception{
UserVO user = userDao.getUserById(id);
if ( user == null ) {
throw new Exception("["+id+"에 해당하는 ID가 없습니다.]");
}
return user;
}
// 사용자 삭제
public void deleteUser(String id) throws Exception{
UserVO dbUser = userDao.getUserById(id);
if (dbUser == null) {
throw new Exception("해당하는 아이디가 없습니다.");
}
userDao.deleteUser(id);
}
// 사용자 정보 변경
public void updateUser(UserVO newUser) throws Exception{
UserVO user = userDao.getUserById(newUser.getId());
if (user == null) {
throw new Exception("해당하는 아이디가 없습니다.");
}
user.setName(newUser.getName());
user.setPhone(newUser.getPhone());
user.setEmail(newUser.getEmail());
userDao.updateUser(newUser);
}
}
예시 1-4)UserApp.java========================================
import java.util.ArrayList;
import java.util.Scanner;
public class UserApp {
public static void main(String[] args) throws Exception {
Scanner sc = new Scanner(System.in);
UserService service = new UserService();
while (true) {
try {
System.out.println("1.가입 | 2.전체조회 | 3.이름검색 | 4.아이디검색 | 5.삭제 | 6.정보변경 | 0.종료");
System.out.print("선택 > ");
int select = sc.nextInt();
System.out.println();
if (select == 1) {
System.out.println("[회원가입]");
System.out.print("아이디 입력 >");
String id = sc.next();
System.out.print("이름 입력 >");
String name = sc.next();
System.out.print("비밀번호 입력 >");
String pwd = sc.next();
System.out.print("연락처 입력 >");
String phone = sc.next();
System.out.print("이메일 입력 >");
String email = sc.next();
UserVO user = new UserVO(id, name, pwd, phone, email);
service.addNewUser(user);
} else if (select == 2) {
System.out.println("[전체 조회]");
ArrayList users = service.getAllUsers();
if(users.isEmpty()) {
System.out.println("조회된 사용자 정보가 없습니다.");
} else {
for(UserVO user : users) {
System.out.println("아이디 : "+user.getId());
System.out.println("이름 : "+user.getName());
System.out.println("비밀번호 : "+user.getPwd());
System.out.println("연락처 : "+user.getPhone());
System.out.println("이메일 : "+user.getEmail());
System.out.println("포인트 : "+user.getPoint());
System.out.println("만든날짜 : "+user.getCreateDate()+"\n");
}
}
} else if (select == 3) {
System.out.println("[이름으로 검색]");
System.out.print("검색할 이름 > ");
String name = sc.next();
System.out.println();
ArrayList users = service.searchUsers(name);
for(UserVO user : users) {
System.out.println("아이디 : "+user.getId());
System.out.println("이름 : "+user.getName());
System.out.println("비밀번호 : "+user.getPwd());
System.out.println("연락처 : "+user.getPhone());
System.out.println("이메일 : "+user.getEmail());
System.out.println("포인트 : "+user.getPoint());
System.out.println("만든날짜 : "+user.getCreateDate()+"\n");
}
} else if (select == 4) {
System.out.println("[아이디로 검색]");
System.out.print("검색할 아이디 > ");
String id = sc.next();
System.out.println();
UserVO user = service.findUserById(id);
System.out.println("아이디 : "+user.getId());
System.out.println("이름 : "+user.getName());
System.out.println("비밀번호 : "+user.getPwd());
System.out.println("연락처 : "+user.getPhone());
System.out.println("이메일 : "+user.getEmail());
System.out.println("포인트 : "+user.getPoint());
System.out.println("만든날짜 : "+user.getCreateDate()+"\n");
} else if (select == 5) {
System.out.println("[아이디 삭제]");
System.out.print("삭제할 아이디 > ");
String id = sc.next();
System.out.println();
service.deleteUser(id);
} else if (select == 6) {
System.out.println("[아이디로 변경]");
System.out.print("변경할 아이디 > ");
String id = sc.next();
System.out.print("이름 > ");
String name = sc.next();
System.out.print("연락처 > ");
String phone = sc.next();
System.out.print("이메일 > ");
String email = sc.next();
System.out.println();
UserVO user = new UserVO();
user.setId(id);
user.setName(name);
user.setPhone(phone);
user.setEmail(email);
service.updateUser(user);
} else if (select == 0) {
System.out.println("시스템 종료");
break;
}
} catch (Exception e) {
// System.err.println("오류 메시지 : "+e.getMessage());
e.printStackTrace();
}
}
}
}