SQL 활용 시험 봤다
( SQL _ if문 사용 )
SELECT IF( 조건문, 참일때값, 거짓일때값 ) AS '필수여부' FROM (TABLE)
SELECT if ( 1=1, '1은 1입니다.', '1이 아닙니다.' )
FROM DUAL
가상테이블
NOW() 를 이용해서 년월일 추출
NOW() 에서 년월일 & 시분초 를 분리해서 출력해보자
SELECT DATE_FORMAT(NOW(), '%Y-%M-%d') AS '날짜',
DATE_FORMAT(NOW(), '%H:%I:%s') AS '시간'
FROM DUAL
Y (대문자) => 2023 // y (소문자) => 23
H (대문자) => 24시간 // h (소문자) => 12시간 (으로 표현)
(% 표기법 참고)
DATE_FORMAT - MariaDB Knowledge Base
Now() 를 활용해서
오늘 작성한 글이면 시분초를 써주고, 이전에 작성된 글이면 년월일을 써주자
(쿼리문)
SELECT
if (
DATE_FORMAT(NOW(), '%Y-%m-%d') =
DATE_FORMAT(bdate, '%Y-%m-%d') ,
'같아요', '달라요'
)
FROM board
LIMIT 10;
Now() 로 뽑아낸 년월일(오늘)과 bdate에서 뽑아낸 년월일을 비교하는 조건식
참이면 => 같아요
거짓이면 => 달라요
오늘 게시판에 글을 1개 새로 써보면
오늘 쓴 글에 대해서는 '같아요' 라고 뜬다
'같아요' 대신 시분초 넣어주고,
'달라요' 대신 년월일 넣어주자
(쿼리문)
SELECT
if(
DATE_FORMAT(NOW(), '%Y-%m-%d')=
DATE_FORMAT(bdate, '%Y-%m-%d'), => 조건식
DATE_FORMAT(bdate, '%H:%i:%s'), => 참일때 나올값 (시분초)
DATE_FORMAT(bdate, '%Y-%m-%d') => 거짓일때 나올값(년월일)
) AS bdate
FROM board
ORDER BY bno DESC
LIMIT 10;
이 if문을 boardview 에다가 추가해서 수정해주자
boardview - CREATE 코드에서 bdate 대신 위의 if 조건문 넣어주기
노란부분 대신에 아래만큼 넣기
if(
DATE_FORMAT(NOW(), '%Y-%m-%d')=
DATE_FORMAT(bdate, '%Y-%m-%d'),
DATE_FORMAT(bdate, '%H:%i:%s'),
DATE_FORMAT(bdate, '%Y-%m-%d')
) AS bdate
아래처럼 자동으로 정리가 되어서 NOW() => current_timestamp() 로 변경된다
그럼 이제 게시판에서
오늘 쓴글은 '시분초'가 뜨고
이전에 쓴글은 '년월일'만 뜬다
이제 페이징을 하려나보다
egovframework:rte:ptl:view:paginationtag [eGovFrame]
변수들 & 메소드들 정리되어있음
총 글의 수는 아래처럼 193개인데
한 화면에 10개씩 보이게 할거니까
193 / 10 = 19.3
=> 총 20페이지가 되도록 해야함 (소수점이 있다면 올림해줘야함)
예를들어 168개의 글이라면
페이지는 1 ~10 까지 하나, 11~17까지 둘
이제 저장소를 추가해주자
pom.xml에다가
repository & 전자정부페이징 추가해주기
저장해주면 요렇게 아래에 파일들이 잘 들어가 있다.
게시판 에러 안나는지 확인~
위의 홈페이지에서 아래 코드 따와서
root-context.xml 에다가 추가해주기 _ 근데 에러난다
아래 밑줄있는 클래스가 없어서 => 수정해주자
아래처럼 패키지명 수정해주기
위에서 객체가(bean이) 총 세개
1. imageRenderer
2. textRenderer
3. paginationManager
그런데
imageRenderer 와 textRenderer 는 각각 image, text라는 id로 paginationManager에 들어가 있으니
우린 맨아래 paginationManager만 가져다가 쓰면 된다.
일단 첫번째에서 ImagePaginationRenderer 클래스에 있는 객체를 id인 "imageRenderer"로 가져와서 사용하자.
이렇게 root에 경로 먼저 넣어줬으니 패키지 & 클래스 생성하자
com.phyho.util 패키지 생성
그 내부에 ImagePaginationRenderer 클래스 생성
요렇게 만들고 싶음
홈페이지에서 코드 가져오자
ImagePaginationRenderer 클래스에 넣어줘
홈페이지에서 아래 컨트롤러부분 참고해서 만들어보자
boardController 에
@GetMapping("/board") 부분에서 처리해주자
PaginationInfo paginationInfo = new PaginationInfo();
=> 객체생성 _ 한국에서 만든거라 한글로 설명이 뜬다
여기에 값을 넣어서 DB로 보내서 JSP에 띄울거다.
model.addAttribute("paginationInfo", paginationInfo);
요 paginationInfo를 "paginationInfo" 라는 이름으로 model에 붙여서 db로 같이 보내자
paginationInfo 요기 안에 필요한 값들 넣어줌
현재 페이지번호 & 한페이지에 게시되는 게시물 수 & 페이징 리스트 사이즈 & 전체 게시물 수
전체 게시글 수 (totalCount) 가져오는 기능인 totalCount() 메소드 생성해서 서비스에게 일을 시키자
가져온 totalCount 를 paginationInfo에 넣어줌!
서비스에서도 totalCount() 메소드 실행시켜서 DAO한테 일시켜
DAO도 totalCount() 메소드 실행시켜서 mapper한테 일시켜
board-mapper 에서는 totalcount 를 가져오는 쿼리문 실행시켜
이렇게 받아온 totalcount 값을 가져와서 setTotalRecordCount() 로 paginationInfo 에 넣어줌
firstRecordIndex & recordCountPerPage 변수 선언하고 paginationInfo에 들어있던 해당값을 넣어줌
시작위치 페이지당 글갯수
주소창에 pageNo 가 뜨면 이걸 int타입인 pageNo 에 저장시켜줄거
pageNo 에 대해 defaultValue 설정
이 pageNo 가 아래 화살표따라 저기에 들어가는거 (현재 페이지 번호)
넣어주고 출력값으로 확인해보자
브라우저에서 게시판을 클릭해보면 출력
첫번째 페이지 인덱스
페이지당 게시글 수
페이지넘버
주소창에 쳐서 10번째 페이지로 이동해보면
출력값 확인해보자
firstRecordIndex랑 recordCountPerPage 두개 값을 한꺼번에 dto에 담아서 가져가자
getter / setter 생성
컨트롤러에서
일단 firstRecordIndex, recordCountPerPage (처음시작위치, 페이지당글수_10으로 정해줌)를
page 변수에 담아줌
mapper까지 가져가면 아래 쿼리문을 활용해서
SELECT * FROM board
ORDER BY bno DESC
LIMIT 20, 10 ;
요기에 firstRecordIndex, recordCountPerPage 이렇게 각각 넣어줄거임
boardList() 메소드로 서비스-DAO-mapper까지 일을 시킬 때 이 page를 메소드의 매개변수로 같이 보내면 된다
일단 list 객체 생성해서 여기에 page가 처리된 값을 담는다
밑줄 클릭해서 서비스에서도 boardList의 매개변수를 PageDTO page 로 채워주고
DAO에 일을 시켜
DAO에서도 boardList의 매개변수를 PageDTO page 로 채워주고
mapper로 보내는데 이때 ( , page ) 추가해줘서 page값을 같이 보내면 됨
mybatisConfig 에서 PageDTO 연결해주고 pageDTO 으로 설정
db의 boardview에서는 limit을 삭제하고
mapper에 쿼리문에서 limit 설정
아래처럼 주소창으로 들어가면 이제 18번째 페이지로 이동가능
홈페이지에서 요부분 가져와서 ( 내가 사용할 type은 text!! )
board.jsp 에 추가
테이블 아래쪽에
<ui:pagination paginationInfo="${paginationInfo}" type="text" jsFunction="linkPage" /> 추가
아래 <%@ ~~ %> 선언해주고 <script> 부분도 추가
아래처럼 주소 수정해주면
이제 페이지 번호가 뜬다!!!
페이지로 이동할 수 있어
div로 감싸서 가운데정렬 해주자
type="img" 로 바꾸고 img 파일 다운받아서 넣어보자
다운받은 이미지파일은 img 폴더에 넣어주고
img들 경로를 각각 해당하는 곳에 넣어준다
firstPageLabel previousPageLabel 1 2 3 4 ....... nextPageLabel lastPageLabel
스타일지정
'국비과정 > Spring' 카테고리의 다른 글
20230728 _[40일차]_01. Spring 게시판 회원가입 페이지 (0) | 2023.07.28 |
---|---|
20230727 _[39일차]_01. Spring 게시판 패키지 나누기 & UUID (0) | 2023.07.27 |
20230725 _[37일차]_01. Spring 게시판 글수정제한 (로그인) (0) | 2023.07.26 |
20230724 _[36일차]_01. Spring 게시판 글쓰기제한 (로그인) (0) | 2023.07.24 |
20230721 _[35일차]_01. Spring 게시판 로그인 & 로그아웃 구현 (0) | 2023.07.21 |