간펴니
간편 자바프로그래밍
간펴니
전체 방문자
오늘
어제
  • 전체보기 (185)
    • 알고리즘 (2)
    • JAVA (69)
      • 이펙티브 자바 (47)
      • JAVA 병렬프로그래밍 (5)
      • 자바 (17)
    • SPRING (60)
      • Spring (12)
      • IceWater Community (37)
      • Homme Shop (10)
      • 토비의 스프링 (1)
    • SPRING BOOT (4)
      • WhiteRecord (7)
    • 오류 (9)
    • DB (10)
      • ORACLE (5)
      • MYSQL (1)
      • MYBATIS (4)
      • JPA (0)
      • 대용량 데이터 베이스 (0)
      • SQL (0)
    • FRONT (8)
      • JSP (2)
      • JavaScript (2)
      • Jquery (3)
      • Thymeleaf (1)
    • AWS (6)
    • JNI (10)
    • 회고 (0)
    • MQ (0)
    • Radis (0)
    • Git (0)
    • Docker (0)

블로그 메뉴

  • 홈
  • 태그
  • 방명록

공지사항

  • 블로그 컨셉 변경

인기 글

태그

최근 댓글

최근 글

티스토리

hELLO · Designed By 정상우.
간펴니

간편 자바프로그래밍

[스프링] 공지사항 구현
SPRING/IceWater Community

[스프링] 공지사항 구현

2021. 9. 30. 14:01
728x90

 

설명에 앞서, 

이번 게시판 프로젝트는 여러 개의 테이블로 카테고리를 나누지 않고,

한 개의 테이블에 bgno라는 number 컬럼으로 카테고리를 나누었다,

 

게시글목록 쿼리에 where bgno = #{bgno} 를 추가해서 게시글을 카테고리 별로 나눠 출력하고,

bgno가 0일때는 해당 where문을 없애서 ( if문) ALL 카테고리를 만들었다.

 

[스프링] 다중 게시판 구현 (CRUD) :: 간편 웹프로그래밍 (tistory.com)

 

[스프링] 다중 게시판 구현 (CRUD)

이번엔 다중 게시판을 구현해보려고 한다. 순서는 먼저 게시판테이블에 BGNO 라는 게시판 구분용 속성을 추가한다. 게시판 테이블은 여러개 만들지 않고, 하나의 테이블을 사용하는 방식으로 구

kimfk567.tistory.com

 

 

현재 공지사항 카테고리는 모든 회원이 작성할 수 있지만,

배포 전에는 관리자 계정만 공지사항 카테고리에 글을 작성할 수 있도록 수정 할 예정이다.

 

최근 2개의 공지사항이 모든 카테고리의 상단에 위치하도록 하는데,

만약 내가 선택한 공지사항이 표시되게 만드는 방법도 뒤에서 설명하겠다.

 


Mapper

 

	<select id="notice" resultType="kr.co.vo.BoardVO" >
	<![CDATA[select * from (select * from mp_board where bgno=2 order by bno desc) where ROWNUM <=2 order by BNO desc]]>
	</select>

게시판테이블(mp_board)의 공지사항 카테고리(bgno=2)의 게시글을 bno( 게시판PR ) 순으로 정렬해서 가져온다.

서브쿼리를 통해 게시판PR순으로 한번 정렬하고, 그 값을 2개의 제한을 두고 가져온다.

쿼리는 간단하기도 하고, 흔한 게시글을 최신순으로 가져오는 쿼리기 때문에 설명을 줄이겠다.


DAO, DAOImpl

public List<BoardVO> notice() throws Exception;


@Override
		public List<BoardVO> notice() throws Exception{
			return sqlsession.selectList("boardMapper.notice");
		}

여러 개의 값을 List로 값을 받아준다.

 


Service, ServiceImpl

public List<BoardVO> notice() throws Exception;

@Override
	public List<BoardVO> notice() throws Exception{
		return dao.notice();
	}

 


Controller

	/*@RequestMapping(value = "board/list", method = RequestMethod.GET)
	public String list(Model model, @ModelAttribute("scri") SearchCriteria scri) throws Exception{
		logger.info("list");
		
		model.addAttribute("list", service.list(scri));
		model.addAttribute("notice", service.notice());

		PageMaker pageMaker = new PageMaker();
		pageMaker.setCri(scri);
		pageMaker.setTotalCount(service.listCount(scri));
		
		model.addAttribute("pageMaker", pageMaker); */
        
        
        model.addAttribute("notice", service.notice());
		
	
	
		
		return "board/list";
		
	}

컨트롤러 부분은 정말 간단하다..

단순한 select문이라 매개변수를 줄 필요도 없고, 페이징을 적용 할 필요도 없다.(scri)

 

그냥 model에 데이터를 담아서 뷰로 돌려주자..


list.jsp

	<table class="table table-hover" width="100%" cellspacing="0"     >
						<thead class="thead-dark">
							<tr>
								<th>번호</th>
								<th>카테고리</th>
								<th width="400"  >제목</th>
								<th>작성자</th>
								<th>등록일</th>
								<th>조회</th>
								<th>추천</th>
							</tr>
						</thead>



<c:forEach items="${notice}" var="notice">
						<tr>
						<td>#${notice.bno} </td>
						<td><strong>공지사항</strong> </td>
						<td><a href="/board/readView?bno=${notice.bno}&
							bgno=2&
							page=${scri.page}&
							perPageNum=${scri.perPageNum}&
							searchType=${scri.searchType}&
							keyword=${scri.keyword}&
							sort=${scri.sort}"
							> <strong>[공지] ${notice.title} </strong></a></td>
						<td><strong>관리자</strong></td>
						<td><fmt:formatDate value="${notice.regdate}"
										pattern="yyyy-MM-dd  hh:mm" /></td>
						<td>${notice.hit} </td>
						<td>${notice.likehit} </td>
						
						
						</tr>
						</c:forEach>
                        
                  
                  
                  
                  
  <c:forEach items="${list}" var="list">
							<tr>
								<td>#<c:out value="${list.bno}" /></td>
								<td>	  
                                
                                //생략

컨트롤러에서 List형식으로 보낸 데이터를 forEach로 화면에 뿌려준다. (key = notice)

 

제목 - 링크에서 , 카테고리를 담당하는 bgno는 2로 고정시켜서 공지사항 카테고리에 맞춰준다.

 

(공지사항 게시글에 들어가서 이전글, 다음글 버튼을 누를 시 공지사항만 볼 수 있도록 )


결과

 

01
슬라이드쇼 2장

1장, 다른 카테고리에서도 공지사항 카테고리의 글 최신순 2개가 가장 상단에 올라감

(페이징 적용과 무관하기 때문에 다른 페이지로 넘어가도 계속 유지)

 

2장.공지사항 카테고리에 글을 작성하면 공지사항이 변경됨

간단하게 구현해보았다. 


만약, 원하는 글을 공지사항으로 하고 싶다면,

 

  • 게시판 테이블에 칼럼을 하나 추가하고 ( ex _ noticeYN),  DEFAULT를 N으로 준다.
  • Mapper 쿼리에서 where 문에 noticeYN = Y 를 추가한다.
  • 직접 DB에서 설정하거나, 관리자 페이지에서 update 문을 이용해 원하는 게시글의 noticeYN값을 Y로 바꿔준다.
  • 원하는 게시글이 공지사항으로 출력된다.

 

아직 관리자 페이지, 관리자 계정을 만들기 전이라 최신순으로 설정해놓았는데,

후에 관리자 관련 로직을 완성하면 추가 할 예정이다.

 


이미 구상을 해놓고 구현을 해서 시간이 얼마 안걸릴 거라고 생각했는데,

DAO쪽에서 오타;; 를 발견못해서 애꿏은 뷰와 컨트롤러만 건들이다가 한시간은 날려버렸다,,

블로그 포스팅 까지 하니 간단한 기능에 시간이 너무 걸려버렸다..ㅜㅜ 할 게 많은데..

 

비밀글같은 경우도 칼럼을 추가하고 where문과 if문을 이용해서 구분하면 간단하게 구현 할 수 있을 것 같다.

 

 

 

 

 

 

728x90
저작자표시 (새창열림)

'SPRING > IceWater Community' 카테고리의 다른 글

[스프링] 게시판 이전글 다음글 읽은 글 표시  (1) 2021.10.01
[스프링]게시판 읽은 글 표시  (3) 2021.10.01
[스프링] 추천기능 구현 (OKKY사이트 추천기능 참고)  (4) 2021.09.28
[스프링] 회원정보수정 - 회원탈퇴 (ajax)  (0) 2021.09.25
[스프링] 회원정보수정 - 비밀번호 (ajax)  (1) 2021.09.24
    'SPRING/IceWater Community' 카테고리의 다른 글
    • [스프링] 게시판 이전글 다음글 읽은 글 표시
    • [스프링]게시판 읽은 글 표시
    • [스프링] 추천기능 구현 (OKKY사이트 추천기능 참고)
    • [스프링] 회원정보수정 - 회원탈퇴 (ajax)
    간펴니
    간펴니
    개발공부 기록하는 곳

    티스토리툴바