스프링

Mapper

 

		<!-- 레코드 개수 계수 -->
	<select id="mysqlListSearchCount" resultType="int">
	   select count(*)  from v_free_board  where bno > 0
	   	 <include refid="search"></include>
	</select>
	
	
<sql id="search">
		
		<if test="search_option !=null">					
			<if test="search_option =='title' || search_option =='writer' || search_option=='content' || search_option=='username' ">
				and   ${search_option} like  concat( '%', #{keyword}, '%' )
			</if>
		</if>
	
	<if test="search_option == 'all'">
			 and   ( title like  concat( '%', #{keyword}, '%' ) )		  
			  or  (  writer like  concat( '%', #{keyword}, '%' ) )
			     or ( content like  concat( '%', #{keyword}, '%' )  )
	</if>
			
</sql>	
	
	<select id="mysqlListSearchCriteria" resultType="BoardVO">
	select * from v_free_board where bno > 0 
			
		 <include refid="search"></include>
		 
		order by bno desc, regdate desc  limit  #{pageStart}, #{perPageNum}
	</select>

 

Criteria

package com.macaronics.www.util.mysql;

public class Criteria {

	private Integer page;
	private Integer perPageNum;
	
	public Criteria(){
		this.page=1;
		this.perPageNum=10;
	}
	
	public void setPage(int page){
		if(page <=0){
			this.page =1;
			return ;
		}
		this.page =page;
	}
	

	public void setPerPageNum(int perPageNum){
		if(perPageNum <=10 || perPageNum >100){
			this.perPageNum=10;
			return ;
		}
		this.perPageNum =perPageNum;
	}
	
	public Integer getPage() {
		return page;
	}
	
	public Integer getPerPageNum() {
		return perPageNum;
	}
	
	
	public Integer getPageStart(){
		
		return (this.page-1) * perPageNum;
	}
	
	
	
}

PageMaker

package com.macaronics.www.util.mysql;

import org.springframework.web.util.UriComponents;
import org.springframework.web.util.UriComponentsBuilder;

import lombok.Data;

@Data
public class PageMaker {

	private int totalCount;
	private int startPage;
	private int endPage;
	private boolean prev;
	private boolean next;
	
	private int displayPageNum =10;
	private Criteria cri;
	
	private int endFinishPage;
	
	
	public void setCri(Criteria cri) {
		this.cri = cri;
	}
	
	public void setTotalCount(int totalCount) {
		this.totalCount = totalCount;
		
		calcData();
	}
	
	
	private void calcData(){
		endPage =(int)(Math.ceil(cri.getPage()/(double)displayPageNum) * displayPageNum);
		startPage =(endPage -displayPageNum) +1;
		
		endFinishPage =(int)(Math.ceil(totalCount)/(double)cri.getPerPageNum());
	
		if(endPage >endFinishPage){
			endPage =endFinishPage;
		}
	
		prev =startPage ==1 ? false :true;
		next =endPage * cri.getPerPageNum() >= totalCount ? false :true;
	}
	
	
	
	public String mysqlSearchQuery(int page){
		
		UriComponents  uriComponents =
				UriComponentsBuilder.newInstance()
				.queryParam("page", page)
				.queryParam("perPageNum", cri.getPerPageNum())
				.queryParam("search_option", ((SearchCriteria)cri).getSearch_option() )
				.queryParam("keyword", ((SearchCriteria)cri).getKeyword() )
				.build();
		
		return uriComponents.toUriString();
	}
	
	

}






SearchCriteria

package com.macaronics.www.util.mysql;

import org.springframework.web.util.UriComponents;
import org.springframework.web.util.UriComponentsBuilder;

import lombok.Data;


public class SearchCriteria extends Criteria {

	private String search_option;
	private String keyword;
	
	

	
	public String getSearch_option() {
		return search_option;
	}
	public void setSearch_option(String search_option) {
		this.search_option = search_option;
	}
	public String getKeyword() {
		return keyword;
	}
	public void setKeyword(String keyword) {
		this.keyword = keyword;
	}
	
	
	@Override
	public String toString() {
		return "SearchCriteria [search_option=" + search_option + ", keyword=" + keyword + "]";
	}
	
	public String mysqlSearchQuery(int page){
		
		UriComponents  uriComponents =
				UriComponentsBuilder.newInstance()
				.queryParam("page", page)
				
				.queryParam("search_option",search_option )
				.queryParam("keyword", keyword )
				.build();
		
		return uriComponents.toUriString();
	}

	
}

 

Controller

	
	@Inject
	private BoardService boardService;
	
	
	@RequestMapping(value="/listAll.do", method=RequestMethod.GET)
	public ModelAndView boardList(@ModelAttribute("cri") SearchCriteria cri){

		
		ModelAndView mv =null;
		
		if(SqlServerEnvironment.SQL.equals("ORACLE")){
			//Orcle DB 일 경우
			PageAndSearch pas =new PageAndSearch();
			
			pas.setCurPage(cri.getPage());
			pas.setSearch_option(cri.getSearch_option());
			pas.setKeyword(cri.getKeyword());
			mv=oraclePageList(pas);
		}else{
			// MYSQL DB 일 경우
			mv =mysqlPageList(cri);
		}	
		return mv;
	}
	
	
	// 오라클 페이지 리스트 페이지 
	public ModelAndView  oraclePageList(PageAndSearch pas){
		
			ModelAndView mv =new ModelAndView();
		
			int count =boardService.countArticle(pas.getSearch_option(), pas.getKeyword());
			
			//페이지 나누기 관련 처리
			if(pas.getCurPage()==null){pas.setCurPage(1);}
			
	
			Pager pager =new Pager(count, pas.getCurPage());
			int start =pager.getPageBegin();
			int end=pager.getPageEnd();
			
			
			logger.info(" ****************   " + pas.toString() + "    메서드  : " + pas.searchQuery(1) +
					"  count : " + count + " start : " + start + "  end  : " + end);
			
			List<BoardVO> list=boardService.boardList(start, end, pas.getSearch_option(), pas.getKeyword());
			
			Map<String, Object> map =new HashMap<>();
			map.put("countList", count);
			map.put("list", list);
			map.put("pager", pager);
			/*map.put("search_option", pas.getSearch_option());
			map.put("keyword", pas.getKeyword());
			*/
				
			mv.addObject("map", map);
			mv.addObject("pageAndSearch", pas);
			
			mv.setViewName(JSP_PAGE+"list");
			
			return mv;
	}
	
	
	//Mysql 페이지 리스트 메소드
	public ModelAndView  mysqlPageList(SearchCriteria cri){
		
		ModelAndView mv =new ModelAndView();
		
		mv.addObject("list", boardService.mysqlListSearchCriteria(cri));
		
		PageMaker pageMaker =new PageMaker();
		pageMaker.setCri(cri);
		
		int count =boardService.mysqlListSearchCount(cri);
		pageMaker.setTotalCount(count);
		
		
		mv.addObject("pageMaker", pageMaker);
		mv.addObject("countList", count);
		mv.setViewName(JSP_PAGE+"mysql_list");
		return mv;
	}
	
	
	

view

 

 


  <!-- Start Blog  -->
  <section id="aa-blog">
    <div class="container">
      <div class="row">
        <div class="col-md-12">
          <div class="aa-blog-area">
            <div class="row">
              <div class="col-md-8">
                <div class="aa-blog-content">
                  <div class="row">
                   <div class="box">
            <div class="box-header">
              <h3 class="box-title" style="margin-bottom: 10px;">Free 게시판</h3>

              <div class="box-tools">
              <form method="get" action="/board/listAll.do"  name="serarchForm">
              		<div class="row" style="margin-top: 20px; margin-bottom: 20px;">
    				<div class="col-md-4">
            	      
            	      <select name="search_option" class="form-control"  >
            	        <option value=""   <c:if test="${ cri.search_option =='' }">selected="selected"</c:if>>----</option>
	                 	<option value="writer"   <c:if test="${ cri.search_option =='writer' }">selected="selected"</c:if>>아이디</option>
	                 	<option value="username"   <c:if test="${ cri.search_option =='username' }">selected="selected"</c:if>>이름</option>
	                 	<option value="content" <c:if test="${ cri.search_option =='content' }">selected="selected"</c:if>>내용</option>
	                 	<option value="title" <c:if test="${ cri.search_option =='title' }">selected="selected"</c:if>>제목</option>
	                 	<option value="all" <c:if test="${ cri.search_option =='all' }">selected="selected"</c:if>>이름+내용+제목</option>
	                  </select>
	                  
	                  
	                  </div>
	               <div class="col-md-4">
				    <input type="text" class="form-control" name="keyword" value="${cri.keyword }">
				    </div>
				    <div class="col-md-4">
  					<button type="submit" class="btn btn-warning">검색</button>
  					</div>
				 </div>
				 
              </form>
      <c:if test="${ not empty  loginUser}" >      
       <p class="input-group input-group-sm" style="margin-top :10px;"><button id="btnWrite" class="btn btn-primary" >글쓰기</button></p>
	</c:if>            
            </div>
              
             
              <p>  
               <span class="label label-danger"> ${countList }</span> 개의 게시물이 있습니다.
              </p>
              <p>
              
              
              
            </div>
            <!-- /.box-header -->
            <div class="box-body table-responsive no-padding">
              <table class="table table-hover">
                <tbody><tr>
                  <th>번호</th>
                  <th>제목</th>
                  <th>글쓴이</th>
                  <th>등록일</th>
                  <th>조회수</th>
                </tr>
               
       <c:forEach items="${list }"  var="row">

                <tr>
                  <td>${row.bno }</td>
                  <td class="rowTitle"> <a href="/board/view.do${pageMaker.mysqlSearchQuery(cri.page) }&bno=${row.bno }">${row.title }</a></td>
                  <td>${ row.writer }</td>
                  <td><span class="label label-success">
                  <fmt:formatDate value="${ row.regdate }"  pattern="yyyy-MM-dd hh:mm"/></span>
                  </td>
                  <td> <span class="badge bg-red">${ row.viewcnt }</span></td>
                </tr>
       
       </c:forEach>
             
             
              </tbody></table>
            </div>
            <!-- /.box-body -->
          </div>
              
             
                  </div>
                  <div class="row">
                    <div class="col-md-12">
                      <div class="aa-properties-content-bottom">
                        <nav>
                    
                                       
                    
                          <ul class="pagination">
                           
                           <c:if test="${cri.page  > 1 }">
                               <li>
                               <a aria-label="Previous" href="javascript:list('${pageMaker.mysqlSearchQuery(1) }')">
                                <span aria-hidden="true">시작</span>
                              </a>
                              </li>
                           </c:if>
                           
                           <c:if test="${pageMaker.prev }">
                            <li>
                              <a aria-label="Previous" href="javascript:list('${pageMaker.mysqlSearchQuery(pageMaker.startPage-1) }')">
                                <span aria-hidden="true">«</span>
                              </a>
                            </li>
                            </c:if>
   
                          <c:forEach begin="${ pageMaker.startPage }"  end="${ pageMaker.endPage }" var="page">
                           	<c:choose>
                           		<c:when test="${ page ==cri.page }">
                           			<li class="active"> 
                            		  <a href="javascript:list('${pageMaker.mysqlSearchQuery(page) }')" >${page}</a>
                            		</li>
                           		</c:when>
                           		<c:otherwise>
                           			<li > 
                            		  <a href="javascript:list('${pageMaker.mysqlSearchQuery(page) }')" >${page}</a>
                            		</li>	
                           		</c:otherwise>
                           	</c:choose>
                           
                          </c:forEach>
                    
           				<c:if test="${ pageMaker.next && pageMaker.endPage >0 }">
                            <li>
                              <a aria-label="Next" href="javascript:list('${ pageMaker.mysqlSearchQuery(pageMaker.endPage +1) }')">
                                <span aria-hidden="true">»</span>
                              </a>
                            </li>
                        </c:if> 
                        <c:if test="${pageMaker.next && pageMaker.endPage >0 }">
                          <li>
                              <a aria-label="Next" href="javascript:list('${ pageMaker.mysqlSearchQuery(pageMaker.endFinishPage) }')">
                                <span aria-hidden="true">끝</span>
                              </a>
                            </li>
                        </c:if>    
                 
                          </ul>
                      
                      </nav>
                      </div>
                    </div>
                  </div>
                </div>
              
           
              </div>
              <!-- Start blog sidebar -->
              <div class="col-md-4">
                <aside class="aa-blog-sidebar">
                  <!-- Start single sidebar -->
                  <div class="aa-blog-sidebar-single">
                    <form action="">
                      <div class="aa-blog-search">
                        <input class="aa-search-text" type="text" placeholder="Search...">
                        <button class="aa-search-submit" type="submit">
                          <i class="fa fa-search"></i>
                        </button>
                      </div>
                    </form>
                  </div>
                  <!-- Start single sidebar -->
                  <div class="aa-blog-sidebar-single">
                    <h3>Categories</h3>
                    <ul class="aa-blog-catg">
                      <li>Properties <span>15000</span></li>
                      <li>Apartment <span>5000</span></li>
                      <li>Office  <span>3000</span></li>
                      <li>Residential <span>4500</span></li>
                      <li>Commercial <span>1000</span>
                          <ul>
                            <li>category 2.1 <span>50</span></li>
                            <li>category 2.2 <span>100</span></li>
                          </ul>
                      </li>
                      <li>Villa <span>800</span></li>
                      <li>Bungalow  <span>200</span></li>
                      <li>News <span>375</span></li>
                      <li>Reviews <span>458</span></li>
                    </ul>
                  </div>
                  <!-- Start single sidebar -->
                  <div class="aa-blog-sidebar-single">
                    <h3>Tags</h3>
                    <div class="tag-cloud">
                      <a href="#">Apartment</a>
                      <a href="#">Propery</a>
                      <a href="#">Residential</a>
                      <a href="#">Commercial</a>
                      <a href="#">Office</a>
                      <a href="#">Rent</a>
                      <a href="#">Sale</a>
                      <a href="#">Villa</a>
                    </div>                    
                  </div>
                  <!-- Start single sidebar -->
                  <div class="aa-blog-sidebar-single">
                    <h3>Recent Post</h3>
                    <div class="aa-blog-recent-post">
                      <div class="media">
                        <div class="media-left">
                          <a href="#">
                            <img alt="img" src="img/blog-img-3.jpg" class="media-object">
                          </a>
                        </div>
                        <div class="media-body">
                          <h4 class="media-heading"><a href="#">This is Title</a></h4>
                          <p>Lorem ipsum dolor sit amet, consectetur adipisicing elit.</p>                
                          <span>15 April, 16</span>
                        </div>              
                      </div>
                      <div class="media">
                        <div class="media-left">
                          <a href="#">
                            <img alt="img" src="img/blog-img-2.jpg" class="media-object">
                          </a>
                        </div>
                        <div class="media-body">
                          <h4 class="media-heading"><a href="#">This is Title</a></h4>
                          <p>Lorem ipsum dolor sit amet, consectetur adipisicing elit.</p>                
                          <span>15 April, 16</span>
                        </div>              
                      </div>
                      <div class="media">
                        <div class="media-left">
                          <a href="#">
                            <img alt="img" src="img/blog-img-1.jpg" class="media-object">
                          </a>
                        </div>
                        <div class="media-body">
                          <h4 class="media-heading"><a href="#">This is Title</a></h4>
                          <p>Lorem ipsum dolor sit amet, consectetur adipisicing elit.</p>                
                          <span>15 April, 16</span>
                        </div>              
                      </div>
                    </div>                    
                  </div>
                  <!-- Start single sidebar -->
                  <div class="aa-blog-sidebar-single">                    
                    <div class="aa-banner-ads">
                      <a href="#">
                        <img src="img/banner-ads.jpg" alt="banner img">
                      </a>
                    </div>                    
                  </div>
                </aside>
              </div>
            </div>
          </div>
        </div>
      </div>
    </div>
  </section>
  <!-- / Blog  -->



<script>
$(document).ready(function(){
	
	
	$("#btnWrite").click(function(){
		
		
		location.href="/board/write.do";
		
	});
	
	
	
});


function list(page){

	location.href='/board/listAll.do'+page;

}

</script>

 

 

 

 

 

 

 

 

about author

PHRASE

Level 60  머나먼나라

엄격한 뜻으로 말한다면 진정한 민주주의는 지금까지 없었고, 앞으로도 결코 존재하지 않을 것이다. -루소

댓글 ( 4)

댓글 남기기

작성