## 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 실행하여 확인
ㄴ 조회 시 작성자 이름이 제대로 출력되는 것을 확인할 수 있음