2014년 8월 30일 토요일

[Web HomePage] 게시판 만들기 - DB(MySql) 부분

개발환경 : Spring Framework, Mybatis, MySql, Java, Jsp
사용 툴 : STS, MySQL Workbench 6.1 CE
  • ※저 스스로 로직과 테이블, jsp를 짜가며 만들었기 때문에 비효율적인 면이나 실제 로직과 다른면이 충분히 있을 수 있습니다. 많은 지적 바랍니다.
  • 테이블 구성
    • b_num : 게시물 번호, 
      • AUTO_INCREMENT 제약조건으로 생성시마다 자동증가
    • b_content : 게시물 내용
    • b_id : 작성자
    • b_hit : 조회수
    • b_date : 작성날자 
      • datetime속성으로 년,월,일,시,분,초 모두 기록됨
    • b_good,b_bad : 추천과 반대
    • b_cate,b_sub : 카테고리와 하부 항목
      • 제가 만들때 카테고리별로 따로 테이블을 만들고 테이블마다 하위 카테고리를 만들어 줬기 때문에 통합 게시물 테이블에서 카테고리를 구분할 속성이 필요했기 때문에 만들어줬습니다.
    • 저의 개발에서는 board_humor, board_tip, board_movie, board_mobile, board_review 라는 이름의 총 5가지의 테이블을 만들었습니다.

  • 테이블 create 쿼리
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
CREATE TABLE `board` (
   `b_num` int(20) NOT NULL AUTO_INCREMENT,
   `b_title` varchar(200) NOT NULL,
   `b_content` varchar(500) NOT NULL,
   `b_id` varchar(20) DEFAULT NULL,
   `b_hit` int(10) unsigned NOT NULL DEFAULT '0',
   `b_date` datetime NOT NULL,
   `b_good` int(10) unsigned NOT NULL DEFAULT '0',
   `b_bad` int(10) unsigned NOT NULL DEFAULT '0',
   `b_cate` varchar(20) DEFAULT NULL,
   `b_sub` varchar(20) DEFAULT NULL,
   PRIMARY KEY (`b_num`)
 ) ENGINE=InnoDB AUTO_INCREMENT=7 DEFAULT CHARSET=utf8;
  • 통합 게시판을 위한 view생성 쿼리
    • union을 통하여 모든 테이블을 통합하여 보여주는 view를 만들었고 각각의 테이블에서 고유의 num이 있으므로 날자로 정렬
1
2
3
4
5
6
create view board_all as
select * from board_humor union all
select * from board_tip union all
select * from board_movie union all
select * from board_review union all
select * from board_mobile order by b_date asc;


  • 게시판 리스트 호출 쿼리
    • comment_board는 댓글 테이블
    • left outer join comment_board b
      • 각각의 게시물에 대한 댓글의 갯수를 호출하기 위한 board_all과 comment_board의 조인, 좀더 쉽게 할수 있지만 외부조인 연습겸 위와 같이 사용
    • limit #{page_set},10
      • 리스트개의 10개를 호출 하므로 지정한 번호로부터 10개 호출하여 추출
    • #{}와${}의 차이
      • ${}는 Mybatis에서 Query문으로 인식하고 #{}는 param으로 인식한다
      • 때문에 동적으로 테이블을 호출하기 위하여 ${}을 사용하였다.
    • @rownum :=@rownum+1과 (select @rownum := 0)
      • Mysql에서는 rownum이 없기 때문에 @rownum :=@rownum+1과 (select @rownum := 0)을 이용하여 rownum 컬럼을 만들어 줬습니다.
      • 통합게시판에서는 각각의 테이블에서의 b_num을 사용할수 없기때문에(당연히 겹치기 때문에) rownum을 만들어 사용했습니다.
select a.*, count(b.cb_num) as comments from 
 (select @rownum := @rownum + 1 as rownum, a.*
 from (select @rownum := 0) rowcolumn, ${table} a
 ) as a left outer join comment_board b
 on a.b_num = b.cb_num and a.b_cate = b.cb_cate 
 group by a.b_num,a.b_cate order by a.rownum desc limit #{page_set},10;
  • 참고, 도움 사이트
    • http://www.javaproject.co.kr/web/main.do

댓글 없음:

댓글 쓰기