Spring 페이징

HOHO·2023년 4월 7일

Spring

목록 보기
11/15

우선 내가 만든 것의 상황

다른 블로그나 글들은 각각의 게시글을 클릭하면 상세페이지로 이동하면서 거기서 삭제나 수정이 가능하게 만든 프로젝트가 많았다

나는 새로 .jsp를 만들지 않고 메인페이지 안에서(list) 게시글 제어가 가능하게 해보고 싶었다 이제 배우는 수준이라 머리 깨지는줄 알았지만 구현은 아직 덜 된 상태로 만들어보긴했다

일기처럼 보려고 쓰는거라서 훨씬 나중에 보게 된다면 이불킥 가능하겠지만 아무튼 바로 본론으로!


내가 해본건 나만의 페이지 내부에 메모장이나 할것들을 게시글형식으로 적어놓은 형태이다 수정할필요는 없고 삭제나 완료상태만 필요하다.

Controller

@Controller
public class AdminHomeController {
	
	@Autowired
	AdminHomeService as;
	
	@RequestMapping(value = "/adminHome", method = RequestMethod.GET)
	public String toDo(AdminHomeVO addv, Model model, HttpSession session) {
		as.lnoReset();
		System.out.println("AdminHomeController 컨트롤러");
        //이동경로 파악을 위한 출력
		session.setAttribute("access", as.toDo(addv));
		model.addAttribute("list", as.toDo(addv));
		int total=as.total(addv);
		model.addAttribute("paging", new PageVO(addv, total));
		return "/adminHome";
	}

이것저것 실험해본다고 뭘 많이 집어넣어 놨다
우선 윗줄부터 기록으로 남기자
as.lnoReset(); = auto_increment적용된 lno를 메인페이지가 뜰때마다 초기화해 준다
model.addAttribute("list", as.toDo(addv)); = 메모장의 dataValue를 service의 toDo메소드로 불러와 list라는 이름을 붙여준다
int total=as.total(addv); = 페이징 처리 밑에서 다시 적을예정
model.addAttribute("paging", new PageVO(addv, total));
= 이것도 페이징 처리한거

Service

public interface AdminHomeService {
	public ArrayList<AdminHomeVO> toDo(AdminHomeVO addv);
	public int total(AdminHomeVO addv);
	public void lnoReset();
}

ServiceImpl

@Service
public class AdminHomeServiceImpl implements AdminHomeService {
	
	@Autowired
	AdminHomeMapper am;

	@Override
	public ArrayList<AdminHomeVO> toDo(AdminHomeVO addv) {
		System.out.println("AdminHomeServiceImpl 셀렉트문");
        //이동 경로파악을 위한 출력
		return am.toDo(addv);
	}
    @Override
	public int total(AdminHomeVO addv) {
		return am.total(addv);
	}

	@Override
	public void lnoReset() {
		am.lnoReset();
	}

Mapper.java

public interface AdminHomeMapper {
	public ArrayList<AdminHomeVO> toDo(AdminHomeVO addv);//select
	public int total(AdminHomeVO addv);
	public void lnoReset();
}

Mapper.xml

	<update id="lnoReset">
		ALTER TABLE dolist AUTO_INCREMENT=1;
		SET @COUNT = 0;
		UPDATE dolist SET lno = @COUNT:=@COUNT+1;
	</update>

	<select id="toDo" resultType="com.obj.model.AdminHomeVO">
		select * from(
			select @rownum:=@rownum+1 rownum, d.*
			from dolist d, (select @rownum:=0) as tmp 
			order by lno desc) as todoList
			<![CDATA[
			where rownum > (#{pageNum}-1)*#{amount} and rownum <= #{pageNum}*#{amount}
			]]>
	</select>
	<select id="total" resultType="int">
  			select count(*) from dolist
  	</select>

시작할때 쿼리문부터 생각해야지 하고 시작했는데 3시간동안 멍때리고있었다
저 멀티쿼리문 작성이랑
auto_increment 초기화를
Mysql에는 자주 해봤는데 Mybatis에 넣을려니 감도 안잡혀서... 암튼 결국 구글은 신이다

멀티쿼리문 작성
<property name="jdbcUrl" value="jdbc:mysql://localhost:3306/testqset?allowMultiQueries=true"></property>
JDBC 드라이버가 설정된 xml파일에서 테이블명 뒤에
?allowMultiQueries=true를 추가해준다
찾아보니 Mysql만 이런식으로 가능하고 Oracle이나 Ms는 다른방법이 있다는 것 같다
암튼 멀티쿼리를 쓰면 update/delete등등 여러문장 또는 이어서 사용이 가능
여러문장으로 나눠서 써야할때는 ;(세미콜론)을 각문장마다 붙여준다

우선 저걸 설정하고 Alter table/Drop 등 DDL이나 DML의 사용은 <update>태그를 사용하는 것 같다

우선은 이렇게 해서 페이징처리 밑 항목삭제시 번호를 1부터 초기화한것에 성공!


보완할점!

아직 처리를 못한부분은 각항목의 삭제가 제일 위에것만 된다는것과 선택된 페이지가 표시가 안되는 문제가 있다

그리고 추가를 했을때(insert) 한글이 깨지는 현상이 생겨서 찾아보다 Controller가 거쳐가는 모든 페이지를 전부 UTF-8세팅을 해줬다

profile
기계 그잡채가 되고싶다

0개의 댓글