본문 바로가기
네이버클라우드/JAVA 웹 프로그래밍

JAVA 44일차 (2023-07-24) 자바 프로그래밍_48. 외부키(Foreign Key) 사용하기_개인프로젝트 - 마트 관리 시스템

by prometedor 2023. 7. 24.
## 48. 외부키(Foreign Key) 사용하기

- 외부키를 설정하고 사용하는 법
- 조인을 이용하여 외부 테이블의 값을 가져오는 방법

 

ㄴ ddl.sql 을 복사하여 ddl2.sql 생성

 

ddl2.sql

ㄴ writer 를 int 타입으로 변경

 

ddl2.sql

ㄴ 해당 코드 제거 후 아래처럼 테이블 내에 category 를 추가해줌

 

ddl2.sql

ㄴ category 컬럼을 추가

 

ddl2.sql

ㄴ 게시판 작성자에 대해 외부키 설정

 

 

ㄴ 존재하는 테이블 삭제

=>

테이블 재생성

ㄴ report_board 테이블 생성

 

ㄴ report_member 테이블 생성

 

ㄴ 게시판 작성자에 대해 외부키 설정해주기

 

생성한 테이블 확인

 

ㄴdata.sql 복사하여 data2.sql 생성

 

data2.sql

ㄴ 암호는 sha1 함수를 이용하도록 함

 

ㄴ 데이터 입력하기

 

ㄴ select 를 이용하여 report_member 에 저장된 데이터 확인

ㄴ created_date 에는 현재 날짜와 시간이 모두 입력됨

 

Member.java

ㄴ java.sql.Timestamp 이용

 

Member.java

ㄴ getter/setter 추가

 

MySQLMemberDao.java

ㄴ 조회 SQL문에 created_date 추가

 

MySQLMemberDao.java

ㄴ ResultSet 객체인 rs에서 created_date 컬럼의 값을 읽어와 Member 객체인 m의 createdDate 필드에 설정하기위해 해당 코드 추가

ㄴ rs.getTimestamp("created_date")은 rs 객체에서 "created_date" 컬럼의 값(시간 정보)을 읽어옴

 

 

ddl2.sql

ㄴ datetime 와 now() 대신 date 와 current_date() 이용

=>

테이블 재생성 후 데이터 재입력

 

Member.java

ㄴ Timestamp 대신 java.sql.Date 이용하기

 

Member.java

ㄴ getter/setter 타입도 맞춰주기

 

MySQLMemberDao.java

ㄴ getTimestamp -> getDate 로 변경

 

MySQLBoardDao.java

ㄴ 데이터베이스에 작성자 부분을 int 로 했기 때문에 위와 같이 변경

 

Board.java

ㄴ writer 필드를 String -> Member 타입으로 변경

 

Board.java

ㄴ getter/setter 타입을 String -> Member 로 변경

 

Member.java

ㄴ 위 코드를 삭제한 뒤 아래와 같이 새로 생성

 

Member.java

=>

ㄴ no 만 Generater hashCod() and equals()  를 이용하여 메서드 만들어주기

=>

Board.java 도 마찬가지로 적용해주기

=>

Board.java

 

MySQLBoardDao.java

ㄴ writer 는 int 타입이므로 .getNo() 추가해주기

 

MySQLBoardDao.java

ㄴ writer 를 Memer 객체로 연결해주기

 

MySQLBoardDao.java

ㄴ writer 를 Memer 객체로 연결해주기

 

BoardAddListener.java

=>

BoardAddListener.java

ㄴ 해당 코드 추가

 

MemberDetailList.java

ㄴ 가입일 추가

 

BoardListListener.java

ㄴ writer 에 .getNo() 추가

 

data2.sql

ㄴ writer 를 숫자로 모두 변경해주기

ㄴ 일부러 번호는 11번 부터 시작해줌

 

ㄴ data2.sql 에 따라 데이터 입력해주기

 

ㄴ category 가 1인 경우 list 출력해보기

 

MySQLBoardDao.java

ㄴ inner join 을 이용해 관계 정의

ㄴ member_no, name 을 추가

=>

실무에서는 아래와 같이 작성함

=>

MySQLBoardDao.java

=>

ㄴ 테이블 데이터 확인

 

MySQLBoardDao.java

ㄴ 쿼리문 수정

ㄴ inner join 이용한 쿼리문 깔끔하게 정리

 

MySQLBoardDao.java

ㄴ category 는 1대신 다시 in-parameter 인 ? 로 변경해주기

 

MySQLBoardDao.java

ㄴ 쿼리문 변경에 따라 해당 코드 추가

 

MySQLBoardDao.java

ㄴ Board 관련은 Board 관련끼리 놓아주기

=> 코드 읽기 쉽도록 해줌

 

BoardListsLitstener.java

ㄴ writer 에 .getName() 추가해주기

ㄴ member 의 name 을 가져오기 위함

 

ClientApp.java 실행하여 확인

ㄴ 작성자가 member 이름으로 제대로 출력됨

 

MySQLBoardDao.java

ㄴ list 메서드의 쿼리문을 복사해와서 수정하기

=>

MySQLBoardDao.java

ㄴ findBy 메서드의 쿼리는 list 메서드의 쿼리에 content 를 추가하고 where 절에 board_no 를 추가함

 

MySQLBoardDao.java

ㄴ 해당 코드 추가

 

BoardDetailListener.java

ㄴ writer 에 .getName() 추가

 

ClientApp.java 실행하여 확인

ㄴ 조회 시 작성자 이름이 제대로 출력되는 것을 확인할 수 있음