본문 바로가기

2023.11.21-2024.05.31

20240229 스프링(아이디중복체크(idCheck), 페이징, 검색(search )

에이잭스 사용해서 통신하기, 어드민페이지 만들기

 

 

join.jsp

스크립트와 아래 라벨태그, 인풋 태그 안에 id 같은지 확인하고, idCheck 확인하기.

        	//2024.02.29
        	$(function(){
        		$('#idCheck').click(function(){
        			let id = $('#id').val();
        			Swal.fire('ID검사', '검사할 아이디: ' +id, 'success');
        			//3글자 이상, 10글자 이하
        			/* if(){
        				//3글자 이하, 10글자 이상 = 비정상->멈춤
        				
        			}else {
        				//3글자 이상, 10글자 이하 = 정상->ajax
        			} */
        			
        		});

 

               			 <!-- 아이디 (중복검사) -->
               			<label for="id" class="col-sm-2 col-form-label">아이디</label>
				<div class="col-sm-7">
					<input type="text" id="id" class="form-control" placeholder="아이디를 입력하세요">
				</div>
						 <!-- 중복검사 버튼 -->
						<div class="col-sm-3">
					<button type="button" id="idCheck" class="btn btn-info w-100">ID 검사</button>
				</div>
			</div>

 

 

 

 

if문으로 조건 넣기(전제)

       	//2024.02.29 idCheck
        	$(function(){
        		$('#idCheck').click(function(){
        			let id = $('#id').val();
        			Swal.fire('ID검사', '검사할 아이디: ' +id, 'success');
        			//3글자 이상, 10글자 이하
        			
        			//기회가 된다면 공백을 사용하지 못하게 하기.
        			if(id.length > 10 || id.length <3){
        				//3글자 이하, 10글자 이상 = 비정상->멈춤
						Swal.fire('ID검사', '3글자 이하, 10글자 이상', 'errir');        				
        			}else {
        				//3글자 이상, 10글자 이하 = 정상->ajax
        				$.ajax({
        					url : './idCheck',
        					type : 'post', 
        					dateType : 'text',
        					data : {id : id},
        					success: function(data){
        						Swal.fire('ID검사', '성공: ' +data, 'success');
        					},
        					error :  function(error){
        						Swal.fire('ID검사', '실패: ' +error, 'error');
        					}
        							
        				});
        			} 
        			
        		});

 

 

 

*공백을 사용하지 못하게 하기.

if(id.length > 10 || id.length <3){

글자수 에러

 

 

 

*3글자 이하, 10글자 이상 = 비정상->멈춤

*3글자 이상, 10글자 이하 = 정상->ajax

        			
        			//기회가 된다면 공백을 사용하지 못하게 하기.
        			if(id.length > 10 || id.length <3){
        				//3글자 이하, 10글자 이상 = 비정상->멈춤
						Swal.fire('ID검사', '3글자 이하, 10글자 이상', 'errir');        				
        			}else {
        				//3글자 이상, 10글자 이하 = 정상->ajax
        				$.ajax({
        					url : './idCheck',
        					type : 'post', 
        					dateType : 'text',
        					data : {id : id},
        					success: function(data){
        						Swal.fire('ID검사', '성공: ' +data, 'success');
        					},
        					error :  function(error){
        						Swal.fire('ID검사', '실패: ' +error, 'error');
        					}
        							
        				});
        			}

지금은 에러만 되는게 맞다

'실패' 에러

 

 

 

LoginController

 

이렇게 넣으면 성공된다. 그런데 우리는 LoginController 에 안넣고, RestFullController 에 만들어준다.

 

RestFullController (api 모아두는 곳) >idCheck 만들기

	@PostMapping("/idCheck")
	public String idCheck() {
		return "0";
	}

 

 

 

 

 

RestFullController

	@PostMapping("/idCheck")
	public String idCheck(@RequestParam("id") String id) {
		System.out.println(id);
		return "0";
	}

 

 

매개변수 변경해주기

public String idCheck(@RequestParam("id") String id)

콘솔에 뜨는지 확인

 

 

아이디가 들어오면 db에게 이 아이디가 있냐고 물어볼 수 있다.

 

RestFullController >RestService 보내기

>여기서 result가 오류가 나게 되는데 String을 바꿔주면 된다.

return + "" ; >>  이렇게 임시로 해주면 오류뜨지 않음

	//2024.02.29 아이디중복체크
	public int idCheck(String id) {
		return restDAO.idCheck(id);
	}

 

 

 

RestService > RestDAO 로 보내기

	public int idCheck(String id) {
		return sqlSession.selectOne("rest.idCheck", id);
	}

 

 

 

RestDAO >셀렉트원으로 (두번째 클릭)

 

 

Rest-mapper > 진짜로 쿼리문 짜는거 너무 어렵다....너무 어렵다 >거의 내가 만든건 없음

	<select id="idCheck" parameterType="String" resultType="Integer">
	SELECT count(*) FROM member WHERE mid=#{id}
	
	</select>

 

 

 RestFullController에서 리턴 값 변경

래스트풀컨트롤러

 

콘솔에 값 오는지 확인

 

조인jsp > 조건 걸어서 가입불가, 가입허가 스왈로 뜨게 하기

        				success: function(data){
        					if(data.count == 1){	
	        					Swal.fire('ID검사','이미 가입된 ID입니다. 다른 아이디를 입력하세요.', 'warning');			
        					} else {
	        					Swal.fire('ID검사', id + '는 가입할 수 있는 ID입니다.', 'success');
	        					//나머지 작업
        					}
        				},

 

 

 

join.jsp> 데이터 값 제이슨으로 변경

제이슨으로 변경

        		if(id.length > 10 || id.length < 3){
        			//3글자 이하, 10글자 이상 = 비정상 -> 멈춤
        			Swal.fire('ID검사','아이디는 3 ~ 10 글자로 만들어주세요.', 'error');
        		} else {
        			//3글자 이상, 10글자 이하 = 정상 -> ajax
        			$.ajax({
        				url : './idCheck',
        				type : 'post',
        				dataType : 'json',
        				data : {id : id},
        				success: function(data){
        					if(data.count == 1){	
	        					Swal.fire('ID검사','이미 가입된 ID입니다. 다른 아이디를 입력하세요.', 'warning');			
        					} else {
	        					Swal.fire('ID검사', id + '는 가입할 수 있는 ID입니다.', 'success');
	        					//나머지 작업
        					}
        				},
        				error : function(error){
        					Swal.fire('ID검사','문제가 발생했습니다 ' + error, 'error');
        				}
        			});
        		}
        	});

 

 

객체 속에 객체는 들어갈 수 있다.

주석 처럼 객체 속에 객체는 들어갈 수 있다.

 

 

 

가입한 id

 

 

리턴값 변경

 

 

join.jsp > RestFoullController  리턴 값 변경 후 스왈은 쓸 수 없으니까 얼터로 작성

$.ajax({
url : './idCheck',
type : 'post', 
dateType : 'json',
data : {id : id},
success: function(data){
alert(data.result.count);

 

 

 

RestFoullController 

맵으로 변경 : 맵이 편한 방식이지 꼭 맵으로 해야하는건 아니다.

	@PostMapping("/idCheck")
	public Map<String, Object> idCheck(@RequestParam("id") String id) {
		System.out.println(id);
		int result = restService.idCheck(id);
		System.out.println("실행결과 : " + result);
		// result : {count : 1/0}
		//return "result : {count : " + result + "} ";
		Map<String, Object> resultMap = new HashMap<String, Object>();
		resultMap.put("count", result);
		
		return resultMap;
	}

 

 

 

데이터를 자동변환해준다. > 폼xml 파일에 있으면 된다. >>이거 왜 줬더라....

 

 

 

에이잭스alert 변경

 

에이잭스 >alert(data.count); 변경

dateType : 'json',으로 되어 있어야 컨트롤러에서 json방식으로 바꾼 리턴값이 들어온다.

        				$.ajax({
        					url : './idCheck',
        					type : 'post', 
        					dateType : 'json',
        					data : {id : id},
        					success: function(data){
        						alert(data.count);
        						if(data == 1){
        						Swal.fire('ID검사', '이미 가입된 ID입니다. 다른 아이디를 입력하세요.', 'success');
        							
        						}else {
	        						Swal.fire('ID검사',id+ '는 가입할 수 있는 ID입니다.', 'success');
        							
        						}
        					},

 

alert 확인창

 

 

나머지 작업 >서블릿에서 했던 작업을 로그인jsp에서 해준다.

아이디검사 완료했습니다, 아이디 잘못되면 경고 뜨도록 , 온체인지

 

 

pom.xml> 제이슨 오프젝트추가 , 기존에 쓰던게 있지만 새로운거 써보고 싶어서 추가.

<!-- https://mvnrepository.com/artifact/org.json/json -->
<dependency>
    <groupId>org.json</groupId>
    <artifactId>json</artifactId>
    <version>20240205</version>
</dependency>

 

 

RestFullController> JSONObject 이용(맵삭제)

 

	@PostMapping("/idCheck")
	public String idCheck(@RequestParam("id") String id) {
		//System.out.println(id);
		int result = restService.idCheck(id);
		//System.out.println("실행결과 : " + result);
		// result : {count : 1/0}
		//return "result : {count : " + result + "} ";
		//Map<String, Object> resultMap = new HashMap<String, Object>();
		//resultMap.put("count", result);
		
		//JsonObject 이용시
		JSONObject json = new JSONObject();
		json.put("count", result);
		
		return json.toString();		
		

	}

 

 

 

리턴 값을 String으로 변화하고,String으로 변환(전체), 맵사용한건 주석처리

	@PostMapping("/idCheck")
	public String idCheck(@RequestParam("id") String id) {
		System.out.println(id);
		int result = restService.idCheck(id);
		System.out.println("실행결과 : " + result);
		// result : {count : 1/0}
		//return "result : {count : " + result + "} ";
		//Map<String, Object> resultMap = new HashMap<String, Object>();
		//resultMap.put("count", result);
		
		//JsonObject 이용시
		JSONObject json = new JSONObject();
		json.put("count", result);
		
		return json.toString();		
		
		
	}
}

 

 

스트링 값으로 변경

public String idCheck(@RequestParam("id") String id) {

 

 

제이슨 객체 추가하고, 리턴값 json.toString으로 변환

		//JsonObject 이용시
		JSONObject json = new JSONObject();
		json.put("count", result);
		
		return json.toString();

 

join.jsp > if(data.count == 1){ 변경

가입할 수 없어야하는데....? >확인하기 >> 고치긴했다.

 

 

 

RestFullController > 게시판을 제이슨으로 출력해주는 api

 

 

 

일단 전체 코드 > 여기서부터 놓친게 많아서 순서가 잘 기억나지 않아 일단 붙여본다.

 // 게시판을 json 으로 출력해 주는 api
	   @GetMapping("/jsonBoard")
	   public String jsonBoard(
			   @RequestParam(value = "pageNo", required = false) String no ,
			   @RequestParam(value = "search", required = false) String search) {

		// pageNo가 오지 않는다면
		   int currentPageNo = 1;
			if (util.str2Int(no) > 0) { // 정수=1, 정수가 아니면 currentPageNo
				currentPageNo = Integer.parseInt(no);
			}
		 //전체 글 수 totalRecordCount

			int totalRecordCount = boardService.totalRecordCount(search);
//	     System.out.println("totalRecordCount : "+totalRecordCount);
			
				// pagination 전자정부 프레임워크

				PaginationInfo paginationInfo = new PaginationInfo();
				paginationInfo.setCurrentPageNo(currentPageNo); // 현재 페이지 번호
				paginationInfo.setRecordCountPerPage(10); // 한 페이지에 게시되는 게시물 수
				paginationInfo.setPageSize(10); // 페이징 리스트의 사이즈 (페이징 숫자 수)
				paginationInfo.setTotalRecordCount(totalRecordCount); // 전체 게시물 건 수

				SearchDTO searchDTO = new SearchDTO();
				searchDTO.setPageNo(paginationInfo.getFirstRecordIndex());
				searchDTO.setSearch(search);
				
				List<BoardDTO> list = boardService.boardList(searchDTO);
	      
	      //json
	      JSONObject jsonList = new JSONObject();
	      jsonList.put("list", list);
	      jsonList.put("paginationInfo", paginationInfo);
	      jsonList.put("pageNo", no);
	      return jsonList.toString();

	      
	      //http://localhost/controller/jsonBoard?pageNo=3 로 들어가면 나옴

	   }

 

 

 

 

아 여기서부터 놓쳤다. 좀 빡친다

BoardController 에서 페이지 만드는 거 가져가야할것 > search 입력부분

 public String jsonBoard(@RequestParam(value = "pageNo", required = false) String no)) {

 

 

		 //전체 글 수 totalRecordCount
			int totalRecordCount = boardService.totalRecordCount(search);
		//System.out.println("totalRecordCount : "+totalRecordCount);

 

 

SearchDTO searchDTO = new SearchDTO();
searchDTO.setPageNo(paginationInfo.getFirstRecordIndex());
searchDTO.setSearch(search);
				
List<BoardDTO> list = boardService.boardList(searchDTO);

 

모델은 이제 못쓴다.

 

join.jsp  >idCheck 스크립트

       	//2024.02.29 idCheck
        $(function(){
        	//Swal.fire('title','content', 'success');
			//2024-02-29 애플리케이션 테스트 수행  psd
        	$('#idCheck').click(function (){        		
        		let id = $('#id').val();
        		//Swal.fire('ID검사','검사할 아이디 : ' + id, 'success');
        		//3글자 이상, 10글자 이하 
        		
        		//기회가 된다면 공백을 사용하지 못하게 해주세요.
        		if(id.length > 10 || id.length < 3){
        			//3글자 이하, 10글자 이상 = 비정상 -> 멈춤
        			Swal.fire('ID검사','아이디는 3 ~ 10 글자로 만들어주세요.', 'error');
        		} else {
        			//3글자 이상, 10글자 이하 = 정상 -> ajax
        			$.ajax({
        				url : './idCheck',
        				type : 'post',
        				dataType : 'json',
        				data : {id : id},
        				success: function(data){
        					if(data.count == 1){	
	        					Swal.fire('ID검사','이미 가입된 ID입니다. 다른 아이디를 입력하세요.', 'warning');			
        					} else {
	        					Swal.fire('ID검사', id + '는 가입할 수 있는 ID입니다.', 'success');
	        					//나머지 작업
        					}
        				},
        				error : function(error){
        					Swal.fire('ID검사','문제가 발생했습니다 ' + error, 'error');
        				}
        			});
        		}
        	});

 

회원가입 스크립트(암호 검사, 이메일형식 검사)

//2024.02.28 회원가입
            //Swal.fire('title','content', 'success');
        	//join을 클릭하면 이벤트 발생
        	$('#join').click(function(){
        	//Swal.fire('회원가입', '회원가입 버튼을 클릭하셨습니다.' , 'success');
        	//id값 가져오기
        	let id=$('#id').val();
        	//Swal.fire('회원가입','아이디:' + id, 'success' );
			
        	let pw1 =$('#password1').val();
        	let pw2 =$('#password2').val();
        	let name =$('#name').val();
       		let email =$('#email').val();
        	//Swal.fire('회원가입','아이디 : ' + id + "비밀번호 : " + pw1 + "/" + pw2, 'success')
        	
        		if(id.length < 3 || id.length > 10){
        			$('#id').focus();
        			Swal.fire('회원가입','아이디는 3~10글자 사이여야 합니다.', 'error');
        			return false;
        		}
        		if(pw1 == ''){
        			$('#pw1').focus();
        			Swal.fire('회원가입','암호를 입력하세요.', 'error');
        			return false;
        		}
        		if(pw2 == ''){
        			$('#pw2').focus();
        			Swal.fire('회원가입','암호를 다시 입력하세요.', 'error');
        			return false;
        		}
        		if(pw1.length < 3 || pw1.length > 10){
        			$('#pw1').text('');
        			$('#pw2').text('');
        			$('#pw1').focus();
        			Swal.fire('회원가입','비밀번호는 3~10글자 사이여야 합니다.', 'error');
        			return false;
        			
        		} else if(pw1 != pw2){
        			$('#pw1').text('');
        			$('#pw2').text('');
        			$('#pw1').focus();
        			Swal.fire('회원가입','비밀번호가 일치하지 않습니다.', 'error');
        			return false;	
        		}
        		
        		if(name.length < 3 || name.length > 10){
        			Swal.fire('회원가입','닉네임은 3~10글자 사이여야 합니다.', 'error');
        			$('#name').focus();
        			return false;
        		}
    		
    		
    		
    		const regExp = /\w+([-+.]\w+)*@\w+([-.]\w+)*\.[a-zA-Z]{2,4}$/;
      		if(!regExp.test(email)){
      			Swal.fire('회원가입','이메일 형식이 아닙니다.', 'error');
        		return false;
      		}

 

스크립트에 들어가는 id 부분이 맞는지 확인해야한다.

		<!-- join-->
		<section class="page-section" id="mail">
			<div class="d-flex justify-content-center">
				<div class="text-center mb-5 w-50">
					<div class="mb-3 row">

						<!-- 아이디 (중복검사) -->
						<label for="id" class="col-sm-2 col-form-label">아이디</label>
				<div class="col-sm-7">
					<input type="text" id="id" class="form-control" placeholder="아이디를 입력하세요">
				</div>
						<!-- 중복검사 버튼 -->
						<div class="col-sm-3">
					<button type="button" id="idCheck" class="btn btn-info w-100">ID 검사</button>
				</div>
			</div>

					<!-- 비밀번호 -->
					<div class="mb-3 row">
				<label for="inputPassword" class="col-sm-2 col-form-label">비밀번호</label>
				<div class="col-sm-5">
					<input type="password" class="form-control" id="password1" placeholder="암호를 입력하세요">
				</div>
					
						<!-- 비밀번호2 -->
						<div class="col-sm-5">
					<input type="password" class="form-control" id="password2" placeholder="암호를 입력하세요">
				</div>
			</div>

					<!-- 닉네임 -->
					<div class="mb-3 row">
				<label for="name" class="col-sm-2 col-form-label">이 름</label>
				<div class="col-sm-10">
					<input type="text" class="form-control" id="name" placeholder="이름을 입력하세요">
				</div>
			</div>
					<!-- 이메일 (중복검사) -->
					<div class="mb-3 row">
				<label for="email" class="col-sm-2 col-form-label">이메일</label>
				<div class="col-sm-10">
					<input type="email" class="form-control" id="email" placeholder="이메일을 입력하세요">
				</div>
			</div>
					<div class="mb-3 row">
				<div class="col-sm-12">
					<button type="button" id="join" class="btn btn-info">회원가입</button>
				</div>
			</div>
			</div>
		</div>
        </section>

 

 

 

 

페이징시작

 

BoardController >pageNo가 오지 않는다면 부분 복사해서 RestFullController 에 넣기

 

 

		int currentPageNo = 1;
		if(util.str2Int(no) > 0 ) {//여기 수정해주세요.
			currentPageNo = Integer.parseInt(no);

 

 

 

매개변수>no로 밥꾸기

 

 

RestFullController > Util 넣어주기

	@Autowired
	Util util;

 

 

 

BoardController>pagination(전자정부페이징)를 RestFullController 으로 복사

 

 

 

List<BoardDTO> list = boardService.boardList 부분 에러나는 부분 사진처럼 수정

 

 

 

선생님거 가져오면 에러가 나니까 알아서 하래..

 

 

board-mapper

 

 

 

 

괄호때문에 한시간 날렸다 ^^ 음 진짜 ....ㅎ중간에 괄호가 잘 되어있지 않아서

List<BoardDTO> list = boardService.boardList

이부분이 계속 에러가 떴다. 아마 가져오는 과정에서 괄호까지 신경쓰지 못해서 인 것 같다.

 

 

 

 

https://chromewebstore.google.com/detail/json-viewer/gbmdgpbipfallnflgajpaliibnhdgobh?hl=ko&utm_source=ext_sidebar

 

이거 크롬확장으로 추가>http://localhost/controller/jsonBoard?pageNo= 번호 로 들어가면 페이지 나온다. 

 

 

여기까지 하면 페이징도 나온다.

 

사진에 있는 검색(서치)를 만들어보자

 

board.jsp >사실 말이야....위에 페이징 부분이 개떠....ㄱ.........잘안되서 서치부분은 잘 못따라갔다....ㅎ

그래서 캡쳐해놓은 사진을 지우지 않겠다...사실 사진이 많은건...내가 잘 모르기때문에 지우지 않는경우가 많지 핫핫핫

 <!-- 검색 -->
            <div class="m-2 bg-secondary">
               <div>
                  <form action="./board">
                     <input type="text" name="search">
                     <input type="hidden" name="pageNo" value="${pageNo }">
                     <button type="submit">검색</button>                  
                  </form>
               </div>
            </div>

 

 

 

폼 태그 > 갯방식의 보드로

 <form action="./board">

 

숨기기> 검색할때는 서치만 가면 된다. 히든은 검증용 코드

 

 

BoardController>search 추가

 

 

이렇게 search 추가

	// 2024.02.20 페이징 추가하기/ 2024.02.29 서치
	@GetMapping("/board")
	public String board(
			@RequestParam(value="pageNo", required=false) String no,
			@RequestParam(value="search", required=false) String search,
			Model model) {

 

 

이렇게 콘솔에 서치가 출력되야한다.

 

 

 

 

 

 

 

 

BoardController>Search 넣으면서 service, dao에 매개변수 다르게 2개씩 들어가 오류가 안난다. 

래스트풀컨트롤러에 페이징 하는 부분에 보드서비스로 넘긴다.(래스트 서비스로 넘기는거 아님)

 

 

BoardController > Search 추가

	// 2024.02.20 페이징 추가하기/ 2024.02.29 서치
	@GetMapping("/board")
	public String board(
			@RequestParam(value="pageNo", required=false) String no,
			@RequestParam(value="search", required=false) String search,
			Model model) {
		
		//System.out.println(search);
		
		//pageNo가 오지 않는다면
		int currentPageNo = 1;
		if(util.str2Int(no) > 0 ) {//여기 수정해주세요.
			currentPageNo = Integer.parseInt(no);
		}
		
		//전체 글 수 totalRecordCount
		int totalRecordCount = boardService.totalRecordCount(search);
		
		//pagination
		PaginationInfo paginationInfo = new PaginationInfo();
		paginationInfo.setCurrentPageNo(currentPageNo); //현재 페이지 번호
		paginationInfo.setRecordCountPerPage(10); 		//한 페이지에 게시되는 게시물 건 수
		paginationInfo.setPageSize(10); 				// 페이징 리스트의 사이즈
		paginationInfo.setTotalRecordCount(totalRecordCount);//전체 게시물 건 수
		
		SearchDTO searchDTO = new SearchDTO();
		searchDTO.setPageNo(paginationInfo.getFirstRecordIndex());
		searchDTO.setSearch(search);
		
		List<BoardDTO> list = boardService.boardList(searchDTO);
		model.addAttribute("list", list);
		//페이징 관련 정보가 있는 PaginationInfo 객체를 모델에 반드시 넣어준다.
		model.addAttribute("paginationInfo", paginationInfo);
		model.addAttribute("pageNo", currentPageNo);
		model.addAttribute("search", search);

		return "board";
	}

 

 

BoardService > Search 추가

	// 2024.02.20 //2024.02.29 서치
	public int totalRecordCount(String search) {
		return boardDAO.totalRecordCount(search);
	}

 

 

 

BoardDAO > Search 추가

	public int totalRecordCount(String search) {
		return sqlSession.selectOne("board.totalRecordCount", search);
	}

 

 

보드매퍼 seach 넣어주기(페이지 하나만 나오게_)

 

	<!-- 2024.02.29 서치 -->
	<select id="totalRecordCount" parameterType="String" resultType="Integer">
		SELECT COUNT(*) FROM board WHERE board_del='1'
		<if test="search != null">
		AND board_title LIKE CONCAT('%', #{search}, '%') 
		OR board_content LIKE CONCAT('%', #{search}, '%')
		</if>
	</select>

 

 

 

BoardController > SearchDTO 가져오기

 

		SearchDTO searchDTO = new SearchDTO();
		searchDTO.setPageNo(paginationInfo.getFirstRecordIndex());
		searchDTO.setSearch(search);

 

 

SearchDTO 만들기 > 별명 만들기(mybatis-config)

package org.mask.dto;

import lombok.Getter;
import lombok.Setter;

@Setter
@Getter
public class SearchDTO {
	private int pageNo; 
	private String search; {
		
	}

}

 

 

 

mybatis-config

  <configuration>
  	<typeAliases>
  		<typeAlias type="java.lang.Integer" alias="integer"/>
  		<typeAlias type="org.mask.dto.BoardDTO" alias="boardDTO"/>
  		<typeAlias type="org.mask.dto.WriteDTO" alias="writeDTO"/>
  		<typeAlias type="org.mask.dto.CommentDTO" alias="commentDTO"/>
  		<typeAlias type="org.mask.dto.LoginDTO" alias="loginDTO"/>
  		<typeAlias type="org.mask.dto.MemberDTO" alias="memberDTO"/>
  		<typeAlias type="org.mask.dto.GalleryDTO" alias="galleryDTO"/>
  		<typeAlias type="org.mask.dto.NoticeDTO" alias="notice"/>
  		<typeAlias type="org.mask.dto.SearchDTO" alias="Search"/>
  	</typeAliases>
  </configuration>

 

 

 

BoardController > searchDTO 수정

		List<BoardDTO> list = boardService.boardList(searchDTO);

 

 

 

BoardService> searchDTO 수정

	public List<BoardDTO> boardList(SearchDTO searchDTO) {
		return boardDAO.boardList(searchDTO);
	}

 

 

 

BoardDAO > searchDTO  수정

	// 2024.02.20 페이징
	public List<BoardDTO> boardList(SearchDTO searchDTO) {
		return boardDAO.boardList(searchDTO);
	}

 

 

 

 

대망의 매퍼 모르겠다 망해라.

 

 

	<select id="boardList" parameterType="search" resultType="boardDTO">
		SELECT b.board_no, b.board_title, m.mname, 
		if(date_format(current_timestamp(),'%Y-%m-%d') = date_format(b.board_date,'%Y-%m-%d'), 
		date_format(b.board_date,'%h:%i'),date_format(b.board_date,'%m-%d')) AS board_date,
		(select count(*) from visitcount where visitcount.board_no = b.board_no) AS board_count,
		(select count(*) from comment where comment.board_no = b.board_no and comment.cdel = 1) AS comment 
		FROM (board b join member m on(b.mno = m.mno)) 
		WHERE b.board_del = '1'
		<if test="search != null">
			AND b.board_title LIKE CONCAT('%', #{search}, '%') 
			OR b.board_content LIKE CONCAT('%', #{search}, '%')
			OR m.mname LIKE CONCAT('%', #{search}, '%') 
		</if>
		order by b.board_no desc
		LIMIT #{pageNo}, 10
	</select>

 

 

 

오전까지는 분명 괜찮았는데 중간부터 놓치니까 따라갈수가없었다.