개발환경 : 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가지의 테이블을 만들었습니다.
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
댓글 없음:
댓글 쓰기