view
화면 전환은 view를 통해 이루어진다
메소드 선언 시 리턴타입을 View로 설정하므로 화면 전환이 매끄럽게 이루어지도록 함
number > BigDecimal
Date > TimeStamp
VARCHAR2 > String
private void start() {
View view = View.MAIN;
while (true) {
switch (view) {
case MAIN:
view = home();
break;
case LOGIN:
view = login();
break;
case SIGN:
view = sign();
break;
default:
break;
}
}
}
private View home() {
System.out.println("1. 로그인");
System.out.println("2. 회원 가입");
int sel = ScanUtil.nextInt("메뉴 선택 : ");
switch (sel) {
case 1:
return View.LOGIN;
case 2:
return View.SIGN;
default:
return View.MAIN;
}
}
private View login() {
System.out.println("로그인");
return View.MAIN;
}
private View sign() {
System.out.println("회원가입");
return View.MAIN;
}
정보과 관련된 service와 dao는 모두 db를 받아 처리하기 때문에 싱글톤으로 처리한다
JDBCUtil 사용 예시
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import util.JDBCUtil;
public class Test {
JDBCUtil jdbc = JDBCUtil.getInstance();
public static void main(String[] args) {
Test test = new Test();
// 데이터 1개만 검색
// test.selectOne();
// 데이터 여러개 검색
// test.selectList();
// insert / delete / update
test.update();
}
// 물음표에 ' ' 를 붙여선 안됨 ?를 검색하는 것과 동일
public void update() {
// String sql = " UPDATE MEMBER"
// + " SET MEM_PASS='1234'"
// + " WHERE MEM_ID ='a001'";
// int num = jdbc.update(sql);
// System.out.println(num+"행이 수정되었습니다.");
String sql = " UPDATE MEMBER"
+ " SET MEM_PASS='1111'"
+ " WHERE MEM_ID =?";
List<Object> param = new ArrayList();
param.add("a001");
int num = jdbc.update(sql,param);
System.out.println(num+"행이 수정되었습니다.");
}
// fk와 연관 되어있을 때 여러 데이터를 삭제해야되기때문에
// 회원 탈퇴할 때는 delete가 아닌 내용을 -- 이나 null로 처리한다
public void selectList() {
// String sql = "SELECT * FROM MEMBER";
// List<Map<String, Object>> list = jdbc.selectList(sql);
// for(Map<String,Object> map : list) {
// System.out.println(map);
// }
// 앞 뒤에 공백 넣어야함
String sql = "SELECT * FROM MEMBER"
+ " WHERE MEM_LIKE = ? ";
List<Object> param = new ArrayList<Object>();
param.add("바둑");
List<Map<String, Object>> list = jdbc.selectList(sql, param);
for(Map<String,Object> map : list) {
System.out.println(map);
}
}
public void selectOne() {
// String sql = "SELECT * FROM MEMBER\r\n" +
// "WHERE MEM_ID = 'a001'";
// Map<String, Object> map = jdbc.selectOne(sql);
String sql = "SELECT * FROM MEMBER\r\n" +
"WHERE MEM_ID = ?" +
" AND MEM_PASS = ?";
List<Object> param = new ArrayList<>();
// 여러 데이터를 넣을 때는 add를 2번 수행
param.add("b001");
param.add("1004");
Map<String, Object> map = jdbc.selectOne(sql, param);
System.out.println(map);
}
}
Aliasing
public void selectOne() {
String sql = "SELECT TO_CHAR(MEM_BIR, 'YYYY-MM-DD') MEM_BIR\r\n" + // {MEM_BIR=2000-03-15}
"FROM MEMBER\r\n" +
"WHERE MEM_ID = 'a001'";
Map<String, Object> map = jdbc.selectOne(sql);
System.out.println(map);
// String sql = "SELECT * FROM MEMBER\r\n" +
// "WHERE MEM_ID = ?" +
// " AND MEM_PASS = ?";
// List<Object> param = new ArrayList<>();
// param.add("b001");
// param.add("1004");
// Map<String, Object> map = jdbc.selectOne(sql, param);
// System.out.println(map);
}
뒤에 MEM_BIR를 붙여주지 않으면 {TO_CHAR(MEM_BIR,'YYYY-MM-DD')=2000-03-15} 컬럼명이
실행문부터 시작하기 때문에 간결하게 표기하기 위해선 앨리어싱(Aliasing)이 필요하다
INSERT INTO JAVA_MEMBER
SELECT ROWNUM, MEM_ID, MEM_PASS, MEM_NAME, 20, 'N' FROM MEMBER;
NO 숫자를 매기는 방법
시퀀스 | MAX 함수 이용
건 수가 많을 때는 시퀀스가 더 용이하다 (MAX 는 모든 값을 체크한 후 찾기 때문에 속도가 오래 걸린다)
시퀀스 내용 참고
프로젝트
로그인 만들기
package dao;
import java.util.List;
import java.util.Map;
import util.JDBCUtil;
public class MemberDao {
private static MemberDao instance;
private MemberDao() {
}
public static MemberDao getInstance() {
if (instance == null) {
instance = new MemberDao();
}
return instance;
}
JDBCUtil jdbc = JDBCUtil.getInstance();
public Map<String, Object> login(List<Object> param){
String sql = " SELECT * \r\n" +
"FROM JAVA_MEMBER\r\n" +
"WHERE ID = ? \r\n" +
"AND PASS = ? ";
// 해당 정보와 맞는 사람 1명을 찾기 때문에 seletOne
return jdbc.selectOne(sql, param);
}
}
package service;
import java.util.List;
import java.util.Map;
import controller.MainController;
import dao.MemberDao;
public class MemberService {
private static MemberService instance;
private MemberService() {
}
public static MemberService getInstance() {
if (instance == null) {
instance = new MemberService();
}
return instance;
}
MemberDao dao = MemberDao.getInstance();
// 로그인 성공 여부
public boolean login(List<Object> param) {
Map<String,Object> member = dao.login(param);
if(member == null) {
return false;
}
// 로그인이 성공했을 때 정보를 담아서 준다
MainController.sessionStorage.put("member", member);
return true;
}
}
dao>service>controller
package controller;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import service.MemberService;
import util.ScanUtil;
import util.View;
public class MainController {
// 데이터 저장할 수 있는 공간 ( 로그인 한 값을 여기에 저장 )
static public Map<String, Object> sessionStorage = new HashMap<>();
// 로그인을 위해 MemberService 클래스 호출
MemberService memberService = MemberService.getInstance();
public static void main(String[] args) {
new MainController().start();
}
private void start() {
View view = View.MAIN;
while (true) {
switch (view) {
case MAIN:
view = home();
break;
case LOGIN:
view = login();
break;
case SIGN:
view = sign();
break;
default:
break;
}
}
}
private View home() {
System.out.println("1. 로그인");
System.out.println("2. 회원 가입");
int sel = ScanUtil.nextInt("메뉴 선택 : ");
switch (sel) {
case 1:
return View.LOGIN;
case 2:
return View.SIGN;
default:
return View.MAIN;
}
}
private View login() {
System.out.println("로그인");
String id = ScanUtil.nextLine("ID : ");
String pw = ScanUtil.nextLine("PASS : ");
// 입력값 저장
List<Object> param = new ArrayList();
param.add(id);
param.add(pw);
// 로그인 성공 여부 확인
boolean loginChk = memberService.login(param);
if(loginChk) {
// 로그인 성공시 member에 sessionStorage에 저장한 member값을 불러오기
Map<String, Object> member = (Map<String, Object>) sessionStorage.get("member");
System.out.println(member.get("NAME")+"님 환영합니다.");
} else {
System.out.println("로그인에 실패하셨습니다");
System.out.println("1. 재 로그인");
System.out.println("2. 회원가입");
System.out.println("3. 홈");
int sel = ScanUtil.nextInt("선택 : ");
if(sel==1) return View.LOGIN;
if(sel==2) return View.SIGN;
if(sel==3) return View.MAIN;
}
return View.MAIN;
}
private View sign() {
System.out.println("회원가입");
return View.MAIN;
}
}
회원가입
package dao;
import java.util.List;
import java.util.Map;
import util.JDBCUtil;
public class MemberDao {
private static MemberDao instance;
private MemberDao() {
}
public static MemberDao getInstance() {
if (instance == null) {
instance = new MemberDao();
}
return instance;
}
JDBCUtil jdbc = JDBCUtil.getInstance();
public void sign(List<Object> param) {
// MAX값 NULL일 때는 0으로 반환되게 설정해줄 것
String sql = "INSERT INTO JAVA_MEMBER\r\n" +
"VALUES ( (SELECT NVL(MAX(NO),0)+1 FROM JAVA_MEMBER), \r\n" +
" ?, ?, ?, ?, 'N')";
jdbc.update(sql, param);
}
}
+ 로그인과 유사하게 boolean으로 받기
package controller;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import service.MemberService;
import util.ScanUtil;
import util.View;
public class MainController {
// 데이터 저장할 수 있는 공간 ( 로그인 한 값을 여기에 저장 )
static public Map<String, Object> sessionStorage = new HashMap<>();
// 로그인을 위해 MemberService 클래스 호출
MemberService memberService = MemberService.getInstance();
public static void main(String[] args) {
new MainController().start();
}
private void start() {
View view = View.MAIN;
while (true) {
switch (view) {
case MAIN:
view = home();
break;
case LOGIN:
view = login();
break;
case SIGN:
view = sign();
break;
default:
break;
}
}
}
private View home() {
System.out.println("1. 로그인");
System.out.println("2. 회원 가입");
int sel = ScanUtil.nextInt("메뉴 선택 : ");
switch (sel) {
case 1:
return View.LOGIN;
case 2:
return View.SIGN;
default:
return View.MAIN;
}
}
private View sign() {
System.out.println("회원가입");
String id = ScanUtil.nextLine("ID : ");
String pw = ScanUtil.nextLine("PASS : ");
String nm = ScanUtil.nextLine("NAME : ");
int age = ScanUtil.nextInt("AGE : ");
List<Object> param = new ArrayList<>();
param.add(id);
param.add(pw);
param.add(nm);
param.add(age);
memberService.sign(param);
return View.MAIN;
}
}
회원탈퇴
로그인 정보에 DELYN이 'Y'일때 로그인이 되지않게도 추가
더보기
public Map<String, Object> login(List<Object> param){
String sql = "SELECT * FROM JAVA_MEMBER\r\n" +
"WHERE ID = ?\r\n" +
"AND PASS = ? \r\n" +
"AND DELYN='N'"; // 추가된값
return jdbc.selectOne(sql, param);
}
package dao;
import java.util.List;
import java.util.Map;
import util.JDBCUtil;
public class MemberDao {
private static MemberDao instance;
private MemberDao() {
}
public static MemberDao getInstance() {
if (instance == null) {
instance = new MemberDao();
}
return instance;
}
JDBCUtil jdbc = JDBCUtil.getInstance();
public void delete(List<Object> param) {
String sql = "UPDATE JAVA_MEMBER\r\n" +
"SET DELYN = 'Y'\r\n" +
"WHERE NO = ?";
jdbc.update(sql, param);
}
}
package service;
import java.util.List;
import java.util.Map;
import controller.MainController;
import dao.MemberDao;
public class MemberService {
private static MemberService instance;
private MemberService() {
}
public static MemberService getInstance() {
if (instance == null) {
instance = new MemberService();
}
return instance;
}
MemberDao dao = MemberDao.getInstance();
public void delete(List<Object> param) {
dao.delete(param);
}
}
package controller;
import java.math.BigDecimal;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import service.MemberService;
import util.ScanUtil;
import util.View;
public class MainController {
// 데이터 저장할 수 있는 공간 ( 로그인 한 값을 여기에 저장 )
static public Map<String, Object> sessionStorage = new HashMap<>();
// 로그인을 위해 MemberService 클래스 호출
MemberService memberService = MemberService.getInstance();
public static void main(String[] args) {
new MainController().start();
}
private void start() {
View view = View.MAIN;
while (true) {
switch (view) {
case DELETE:
view = delete();
break;
default:
break;
}
}
}
private View delete() {
Map<String, Object> member = (Map<String, Object>) sessionStorage.get("member");
// DB NUMBER데이터
BigDecimal no = (BigDecimal) member.get("NO");
int num = no.intValue();
List<Object> param = new ArrayList();
param.add(num);
memberService.delete(param);
sessionStorage.clear(); // 로그인정보 삭제
return View.MAIN;
}
}
회원정보출력
package dao;
import java.util.List;
import java.util.Map;
import util.JDBCUtil;
public class MemberDao {
private static MemberDao instance;
private MemberDao() {
}
public static MemberDao getInstance() {
if (instance == null) {
instance = new MemberDao();
}
return instance;
}
JDBCUtil jdbc = JDBCUtil.getInstance();
public List<Map<String, Object>> list() { // 파라미터가 없으므로 생략
String sql = "SELECT NAME,AGE FROM JAVA_MEMBER\r\n" +
"WHERE DELYN = 'N'";
return jdbc.selectList(sql); // 전체 출력이므로 list
}
}
package service;
import java.util.List;
import java.util.Map;
import controller.MainController;
import dao.MemberDao;
public class MemberService {
private static MemberService instance;
private MemberService() {
}
public static MemberService getInstance() {
if (instance == null) {
instance = new MemberService();
}
return instance;
}
MemberDao dao = MemberDao.getInstance();
public List<Map<String,Object>> list() {
return dao.list();
}
}
package controller;
import java.math.BigDecimal;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import service.MemberService;
import util.ScanUtil;
import util.View;
public class MainController {
// 데이터 저장할 수 있는 공간 ( 로그인 한 값을 여기에 저장 )
static public Map<String, Object> sessionStorage = new HashMap<>();
// 로그인을 위해 MemberService 클래스 호출
MemberService memberService = MemberService.getInstance();
public static void main(String[] args) {
new MainController().start();
}
private void start() {
View view = View.MAIN;
while (true) {
switch (view) {
case LIST:
view = list();
break;
default:
break;
}
}
}
private View list() {
List<Map<String,Object>> list = memberService.list();
System.out.println("-----------");
System.out.println("이름\t나이");
System.out.println("-----------");
for(Map<String,Object> map : list) {
System.out.println(map.get("NAME")+"\t"+map.get("AGE"));
}
System.out.println("-----------");
return View.MEMBER;
}
}
게시판 만들기
수정하는 것을 몇개로만 지정할때
게시글 개행
lombok
cmd서 lombok.jar저장된 경로에서
java -jar lombok.jar
(이클립스 설치 경로에 있는) tool>이클립스 후 Install/Update
vo에서 @Date하고 import를 한다면 Getter Setter를 쓰지않고도 작성할 수 있다.
package vo;
import lombok.Data;
// Getter Setter 자동만들기 기능
@Data
public class MemberVo {
private int no;
private String id;
private String pass;
private String name;
private int age;
private String delyn;
}
'JAVA > JAVA BASIC' 카테고리의 다른 글
[JAVA] 예외 (0) | 2024.04.01 |
---|---|
3/29 Homework (0) | 2024.03.29 |
[JAVA] 컬렉션 연습 (0) | 2024.03.29 |
3/28 Homework (0) | 2024.03.28 |
[JAVA] Collection Framework (1) | 2024.03.28 |