springBoot查詢數據分頁顯示

springBoot全部依賴和配置文件都寫好的狀況下
一、dao接口的實現方法javascript

package com.cy.pj.sys.dao;

import java.util.List;

import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;

import com.cy.pj.sys.pojo.SysLog;
@Mapper
public interface SysLogDao {
/**
 * 
 * @param username 查詢條件(例如查詢那個用戶的日誌信息)
 * @return  總記錄數(基於這個結果能夠計算總頁數)
 */
    int getRowCount(@Param("username") String username);
    /**
     * 
     * @param username 查詢條件(例如查詢那個用戶的日誌信息)
     * @param startIndex 當前頁的起始位置
     * @param paInteger 當前頁的頁面大小
     * @return 當前頁的日誌記錄信息
     * 數據庫中每條日誌信息封裝到一個SysLog對象中
     */
    List<SysLog> findPageObjects(
            @Param("username")String username,
            @Param("startIndex")Integer startIndex,
            @Param("pageSize")Integer pageSize
            );
}

二、寫實現dao中Mapper的sql語句html

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
  "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.cy.pj.sys.dao.SysLogDao">
<!-- sql元素用於對於sql語句共性的提取,須要的位置用<include>引入 -->
    <sql id="queryWhereId">
        from sys_Logs
        <where>
            <if test="username!=null and username!=''">
                username like concat('%',#{username},'%')
                <!-- concat 字符串的鏈接 -->
            </if>
        </where>
    </sql>
    <!-- 按條件統計記錄總數 -->
    <select id="getRowCount" resultType="int">
    select count(*)
    <include refid="queryWhereId"/>
    </select>
    <!-- 在映射文件中添加爲id爲 findPageObjects元素,,實現分頁查詢-->
    <select id="findPageObjects" resultType="com.cy.pj.sys.pojo.SysLog">
    select * 
    <include refid="queryWhereId"/>
    order by createdTime desc 
    limit #{startIndex},#{pageSize}
    </select>
</mapper>

三、寫pojo類對數據進行封裝,所顯示的表字段的pojo類
3.1這裏是SysLogjava

package com.cy.pj.sys.pojo;
import java.io.Serializable;
import java.util.Date;

import lombok.Data;
/**
 * 定義用於封裝日誌信息的一個pojo對象,這樣的對象,在定義時要遵循一下規則
 * 1)屬性儘可能都用對象類型
 * 2)提供無參數構造函數
 * 3)提供set/get方法,boolean類型變量不能以is做爲前綴
 * 4)實現序列化接口並手動添加序列化id(便於後續對此對象進行序列化):在java中建議全部用於存儲數據 的對象都實現
 * FAQ?
 * 1)爲何要實現序列化接口
 * 2)什麼是序列化?(將對象轉化爲字節)
 * 3)爲何要序列化?應用在什麼場景?(將數據持久化,或將數據存儲到緩存中)
 * 4)什麼是反序列化?(將字節轉換爲對象
 * 5)如何序列化和反序列化
 * 5.1)設計類是要實現序列化接口
 * 5.2)構建IO對象(ObjectOutputStream/ObjectinputStream)
 * 5.3)經過I/O對象進行序列化和反序列化
 * @author Administrator
 *
 */
@Data
public class SysLog implements Serializable{

    private static final long serialVersionUID = -1592163223057343412L;
private Integer id;
//用戶名
private String username;
//用戶操做
private String operation;
//請求方法
private String method;
//請求參數
private String params;
//執行時長(毫秒)
private Long time;
//ip地址
private String ip;
//建立時間
private Date createdTime;
}

3.2對獲取的信息進行封裝(獲取分頁信息的頁碼值、頁面大小(就是每頁所顯示的記錄)、獲取的表總共記錄數、總頁數 、當前記錄)ajax

package com.cy.pj.sys.pojo;

import java.util.List;

import lombok.Data;
/**
 * 
 * @author PageObject 爲業務封裝分業務相關數據的BO對象
 * @param <T>參數化的類型(泛型)
 */
@Data
public class PageObject<T> {//類名<泛型>:類泛型(這裏的泛型用於約束類中的屬性,方法參數,方法的返回值)
    /**當前頁的頁碼值 */
    private Integer pageCurrent=1;
     /**頁面大小*/
    private Integer pageSize=3;
      /**總行數(經過查詢得到)*/

    private Integer rowCount=0;
    /**總頁數(經過計算得到)*/

    private Integer pageCount=0;
    /**當前頁記錄*/
     private List<T> records;

}

3.3處理異常進行封裝spring

package com.cy.pj.sys.pojo;

public class JsonResult {
    /**
     * 狀態碼
     */
private int state=1;
/**
 * 狀態信息
 */
private String message="ok";
/**
 * 正確數據
 */
private Object data;
public JsonResult() {
}
public JsonResult(String message) {
    this.message = message;

}
public JsonResult(Object data) {
    this.data = data;
}
public JsonResult(Throwable t) {
    this.state=0;
    this.message=t.getMessage();

}
public int getState() {
    return state;
}
public void setState(int state) {
    this.state = state;
}
public String getMessage() {
    return message;
}
public void setMessage(String message) {
    this.message = message;
}
public Object getData() {
    return data;
}
public void setData(Object data) {
    this.data = data;
}

}

四、寫service接口sql

package com.cy.pj.sys.service;

import com.cy.pj.sys.pojo.PageObject;
import com.cy.pj.sys.pojo.SysLog;

public interface SysLogService {
    PageObject<SysLog> findPageObject(String username,Integer pageCurrent);
}

五、寫實現service接口的實現類數據庫

package com.cy.pj.sys.service.impl;

import java.util.List;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import com.cy.pj.sys.dao.SysLogDao;
import com.cy.pj.sys.pojo.PageObject;
import com.cy.pj.sys.pojo.SysLog;
import com.cy.pj.sys.service.SysLogService;

import om.cy.pj.common.exception.ServiceException;
@Service
public class SysLogServiceImpl implements SysLogService {
    @Autowired
    private SysLogDao sysLogDao;

    @Override
    public PageObject<SysLog> findPageObject(String username, Integer pageCurrent) {
        // 1.驗證參數的合法性
        // 1.1驗證pageCurrent的合法性
        // 不合法拋出IllegalArgumentException異常
        if (pageCurrent == null || pageCurrent < 1)
            throw new IllegalArgumentException("當前也顯示不正確");
        // 基於條件查詢總記錄數
        // 2.1執行查詢
        int rowCount = sysLogDao.getRowCount(username);
        // 2.2驗證查詢結果,假如結果爲0不在執行以下操做
        if (rowCount == 0)

            throw new ServiceException("系統登陸沒有查到對應的記錄");
        // 3.基於條件查詢當前頁記錄(pageSize定義爲2)
        // 3.1)定義pageSize
        int pageSize = 2;
        //3.2計算startIndex
        int startIndex=(pageCurrent-1)*pageSize;
        //3.3執行當前數據的查詢操做
        List<SysLog> records = sysLogDao.findPageObjects(username, startIndex, pageSize);
        //4.對分頁信息以及當前頁記錄進行封裝
        //4.1 構建PageObject對象
        PageObject<SysLog> pageObject = new PageObject<>();
        //4.2封裝數據
         pageObject.setPageCurrent(pageCurrent);
          pageObject.setPageSize(pageSize);
          pageObject.setRowCount(rowCount);
          pageObject.setRecords(records);
          pageObject.setPageCount((rowCount-1)/pageSize+1);
          //5.返回封裝結果
        return pageObject;
    }

}

5.自定義異常apache

package om.cy.pj.common.exception;

public class ServiceException extends RuntimeException {
public ServiceException() {
    super();
}

public ServiceException(String message) {
    super(message);
}
public ServiceException(Throwable cause) {
    super(cause);
}
}

controller類json

@Controller
public class PageController {
    @Autowired
    private SysLogService sysLogService;

    /*
     * 在Controller類中添加分頁請求處理方法
     */    
    @RequestMapping("doFindPageObjects")
    @ResponseBody
    public JsonResult doFindPageObjects(String username,Integer pageCurrent) {
        PageObject<SysLog> findPageObject = sysLogService.findPageObject(username, pageCurrent);
        return new JsonResult(findPageObject);
    }

html頁面和js寫的方法
數據顯示頁面的js編寫方法緩存

<div id="pageId" class="box-footer clearfix" dm="100"></div>
            <!-- /.box-body -->
        </div>
        <!-- /.box -->
    </div>
</div>
<script type="text/javascript">    
/* 分頁頁面加載完成,向服務端發起異步請求 */
    $(function() {
        $("#pageId").load("doPageUI",function(){
            doGetObjects();
        });
    });

    /* 定義異步請求處理函數, */
    function doGetObjects(){
        //1.定義url和參數
        var url = "doFindPageObjects";
        var params={"pageCurrent":1};
        //2.發起異步請求
         //請問以下ajax請求的回調函數參數名能夠是任意嗎?//能夠,必須符合標識符的規範
        $.getJSON(url,params,function(result){
            
            doHandleQueryResponseResult(result);
        });//特殊的ajax函數
    }
    function doHandleQueryResponseResult(result){
        if(result.state==1){//ok
            //更新table中tbody內部的數據
            doSetTableBodyRows(result.data.records);//將數據呈如今頁面上
            /* 
            //更新頁面page。html分頁數據 
            */
            doSetPagination(result.data);    
        }else{
            alert(result.message);
        }
    }
    
    function doSetTableBodyRows(records){
        //1.獲取tBody對象,並清除對象
        var tBody=$("#tbodyId");
        tBody.empty();
        //2.迭代records記錄,並將其內容追加到tbody
        for(var i in records){
            //2.1構建tr對象
            var tr=$("<tr></tr>");
            //2.2構建tds對象
            var tds=doCreateTds(records[i]);
            //2.3將tds追加到tr中
            tr.append(tds);
            //2.4將tr追加tbody中
            tBody.append(tr);
        }
    }
    function doCreateTds(data){
        var tds="<td><input type='checkbox' class='cBox' name='cItem' value='"+data.id+"'></td>"
        +"<td>"+data.username+"</td>"
        +"<td>"+data.operation+"</td>"
        +"<td>"+data.method+"</td>"
        +"<td>"+data.params+"</td>"
        +"<td>"+data.ip+"</td>"
        +"<td>"+data.time+"</td>";
        return tds;
    }


</script>

建立上下頁翻頁的按鈕HTML頁 以及js的編寫

<ul class="pagination pagination-sm no-margin pull-right">
    <li><a class="first">首頁</a></li>
    <li><a class="pre">上一頁</a></li>
    <li><a class="next">下一頁</a></li>
    <li><a class="last">尾頁</a></li>
    <li><a class="rowCount">總記錄數(0)</a></li>
    <li><a class="pageCount">總頁數(0)</a></li>
    <li><a class="pageCurrent">當前頁(0)</a></li>
</ul>
<script type="text/javascript">
    function doSetPagination(page){
        console.log("page",page)
        //1.初始化數據
        $(".rowCount").html("總記錄數("+page.rowCount+")");
        $(".pageCount").html("總頁數("+page.pageCount+")");
        $(".pageCurrent").html("當前頁("+page.pageCurrent+")");
    //2.綁定數據(爲後續對此數據的使用提供服務)
    $("#pageId").data("pageCurrent",page.pageCurrent);
    $("#pageId").data("pageCount",page.pageCount);
    }
    $(function(){
        //事件註冊
    $("#pageId").on("click",".first,.pre,.next,.last",doJumpToPage);
    })
    function doJumpToPage(){
        //1.獲取點擊對象的clss值
        var cls=$(this).prop("class");//Property
        //2.基於點擊的對象執行pageCurrent值得修改
        //2.1獲取pageCurrent, pageCount的當前值
         var pageCurrent=$("#pageId").data("pageCurrent");
            var pageCount=$("#pageId").data("pageCount");
            //2.2修改pageCurrent的值
            if(cls=="first"){//首頁
                pageCurrent=1;
            }else if(cls=="pre"&&pageCurrent>1){//上一頁
                pageCurrent--;
            }else if(cls=="next"&&pageCurrent<pageCount){//下一頁
                pageCurrent++;
            }else if(cls=="last"){//最後一頁
                pageCurrent=pageCount;
            }else{
             return;
    }
            //3.對pageCurrent值進行從新綁定
            $("#pageId").data("pageCurrent",pageCurrent);
            //4.基於新的pageCurrent的值進行當前頁數據查詢
            doGetObjects();
    }
     function doGetObjects(){
        //1.定義url和參數
        var url ="doFindPageObjects";
        //data是從指定元素上獲取綁定的數據
        //數據會在什麼時候進行綁定?(setPagination,doQueryObjects)
        var pageCurrent = $("#pageId").data("pageCurrent");
        //爲何要執行以下判斷,而後初始化pageCurrent的值爲1
        //pageCurrent參數在沒有賦值的狀況下,默認初始值應該爲1.
        if(!pageCurrent)
            pageCurrent=1;
        var params={"pageCurrent":pageCurrent};
        //2.發起異步請求
        //請問以下ajax請求的回調函數參數名能夠是任意的嗎??能夠,必須符合標識符的規範
        $.getJSON(url,params,function(result){
            //請問result是一個字符串仍是json格式的js對象?  答:json格式對象
            doHandleQueryResponseResult(result);

        });
    }//特殊的ajax函數
    
</script>~~~~
相關文章
相關標籤/搜索