일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |
Tags
- 연산자
- 오버라이딩
- SQL
- 논리 연산자
- @PreAuthorize("isAuthenticated()")
- 반복문
- 상속
- SpringSecurity 로그아웃
- SpringSecurity 로그인
- StringBuffer
- SQL튜닝
- 배열
- SQL 튜닝
- 객체지향
- 예약어
- 객체
- join
- java
- 스프링시큐리티 로그아웃
- 오버로딩
- 자바의정석
- 비교 연산자
- 친절한 SQL
- 함수
- 식별자
- 산술 연산자
- 이클립스 설치
- spring 게시판 삭제
- 친절한 SQL 튜닝
- 인텔리제이 Web 애플리케이션
Archives
- Today
- Total
gi_dor
spring 게시판 - 공지사항 하단 이전글 다음글 제목 본문
Mappr.xml
<select id="selectPrev" parameterType="int" resultType="NoticeDTO">
SELECT TITLE, NOTC_NO
FROM notice
WHERE NOTC_NO = #{notcNo} - 1
</select>
<select id="selectNext" parameterType="int" resultType="NoticeDTO">
select TITLE, NOTC_NO
from notice
where NOTC_NO = #{notcNo} + 1
</select>
에러
notcNo +1
notcNo -1
100번 글을 조회중
notcNo+1 은 101번이 되고
notcNo -1 은 99번 이 된다
만약 99번 과 101번을 삭제 했다면
이전글은 98번과 다음글은 102 번이 되는데 +1 , -1 로 인해 98번과 102번으로 갈수가 없다.
delete from notice
where NOTC_NO = 99;
delete from notice
where NOTC_NO = 101;
해결방법
내가 원하는거는 이전 글과 다음글의 제목 각각 1개씩이니
조건으로 내가 제시한 숫자보다 작은 숫자 , 큰숫자만 조회해서
정렬 한뒤 LIMIT으로 맨 위에 나오는 행만 보이게 한다.
SELECT TITLE, NOTC_NO
FROM notice
WHERE NOTC_NO < #{notcNo}
ORDER BY NOTC_NO DESC
LIMIT 1
SELECT TITLE, NOTC_NO
FROM notice
WHERE NOTC_NO < 100
ORDER BY NOTC_NO DESC
LIMIT 1
// 99가 삭제 되었고 100보다 작은수는 98
// 역순으로 정렬해서 98 97 96 95 순서로 나오게 한뒤에
// LIMIT 으로 맨첫번째 행만 보여준다.
<select id="selectNext" parameterType="int" resultType="NoticeDTO">
select TITLE, NOTC_NO
from notice
where NOTC_NO > #{notcNo}
order by NOTC_NO asc
LIMIT 1
</select>
<select id="selectNext" parameterType="int" resultType="NoticeDTO">
select TITLE, NOTC_NO
from notice
where NOTC_NO > 100
order by NOTC_NO asc
LIMIT 1
</select>
// 101번이 삭제된 이후 다음 큰수는 102 103 104 105
// 오름차순으로 나타낸뒤
// 맨위에 조회되는 102 만 보이게 LIMIT 1
주의
<!-- 이전 공지사항 제목 번호 조회-->
<select id="selectPrev" parameterType="int" resultType="NoticeDTO">
SELECT TITLE, NOTC_NO
FROM notice
WHERE NOTC_NO < #{notcNo}
ORDER BY NOTC_NO DESC
LIMIT 1
</select>
<!-- 다음 공지사항 제목 번호 조회-->
<select id="selectNext" parameterType="int" resultType="NoticeDTO">
select TITLE, NOTC_NO
from notice
where NOTC_NO > #{notcNo}
order by NOTC_NO asc
LIMIT 1
</select>
Mapper 에서는 > , < 이런 등호가 먹히지 않는다고 한다 ?
< > 를 사용
DAO
@Repository
public class NoticeDAOImpl implements NoticeDAO {
@Autowired
SqlSession session;
String namespace = "com.teamProject.syusyu.NoticeMapper.";
@Override
public NoticeDTO selectPrev(Integer notcNo)throws Exception{
return session.selectOne(namespace+"selectPrev",notcNo);
}
@Override
public NoticeDTO selectNext(Integer notcNo)throws Exception{
return session.selectOne(namespace+"selectNext",notcNo);
}
}
Service
@Service
public class NoticeServiceImpl implements B_NoticeService {
// DAO 주입시 생성자로 주입 받기!!!
NoticeDAO noticeDao;
@Autowired
public NoticeServiceImpl(NoticeDAO noticeDao) {
this.noticeDao = noticeDao;
}
@Override
public NoticeDTO getPrevTitle(Integer notcNo) throws Exception {
return noticeDao.selectPrev(notcNo);
}
@Override
public NoticeDTO getNextTitle(Integer notcNo) throws Exception {
return noticeDao.selectNext(notcNo);
}
}
Controller
/**
* notcNo 공지사항의 글 번호를 이용해서 해당 글을 읽음
* notcNo 를 기준으로 이전 글과 다음글의 제목을 가져 온다.
*
* @param notcNo 공지사항의 번호 (글 번호)
* @param sc 검색 조건 SearchCondition - page, pageSize, 검색바 -keyword,option
* @return 공지사항 글 상세 페이지 notice.jsp
* @throws Exception DB 조회 도중 발생할 수 있는 예외
* @author han
* @since 2023-07-31
*/
// List/read?page=?&pageSize=?
// 공지사항 글 읽기
@GetMapping("/read")
public String read(Integer notcNo, SearchCondition sc, Model m) throws Exception {
try {
// notcNo(글의 번호)를 이용해서 특정 공지사항 읽어오기
NoticeDTO noticeDTO = noticeService.read(notcNo);
// 이전 글과 다음 글의 제목 가져오기
NoticeDTO prevNotice = noticeService.getPrevTitle(notcNo);
NoticeDTO nextNotice = noticeService.getNextTitle(notcNo);
// 이전 글과 다음 글의 제목을 모델에 추가해서 View 로 전달해줌
m.addAttribute("prevTitle", prevNotice != null ? prevNotice.getTitle() : null);
m.addAttribute("nextTitle", nextNotice != null ? nextNotice.getTitle() : null);
// 이전 글과 다음 글의 번호를 모델에 추가
m.addAttribute("prevNo", prevNotice != null ? prevNotice.getNotcNo() : null);
m.addAttribute("nextNo", nextNotice != null ? nextNotice.getNotcNo() : null);
// 조회한 공지사항의 글 정보와 검색조건(SearchCondition)을 모델에 추가해서 View로
m.addAttribute("noticeDTO", noticeDTO);
m.addAttribute("sc", sc);
// m.addAttribute("page", page);
// m.addAttribute("pageSize", pageSize);
// 매개변수 Integer page , Integer pageSize 에서 SearchCondition 사용
} catch (Exception e) {
e.printStackTrace();
}
return ViewPath.FOS_HELP+"notice";
// ViewPath : public static final String FOS_HELP = ".help" + FOS + "cs/help/";
}
728x90
'First > Spring' 카테고리의 다른 글
spring 게시판 글 작성 (1) | 2023.07.23 |
---|---|
게시판 - 삭제 remove() // 공지사항 글 삭제 (0) | 2023.07.18 |
FAQ 게시판 만들기 - 타입 선택시 해당 타입의 글만 보이게 하기 (0) | 2023.07.11 |
spring 게시판 페이지 이동 pageHandler << < > >> (0) | 2023.06.24 |
SqlSession 메서드 - mapper.xml 작성시 주의!! (0) | 2023.06.23 |