java ssm框架實現(xiàn)分頁功能的示例代碼(oracle)
java web 實現(xiàn)分頁功能,分享給大家,具體如下:
使用框架:ssm
數(shù)據(jù)庫:oracle
話說 oracle 的分頁查詢比 mysql 復(fù)雜多了,在這里簡單談一下:
查詢 前十條數(shù)據(jù):
SELECT * FROM( SELECT ROWNUM WN,RN.* FROM ( SELECT id, title, create_time as createTime, musictor, musictitle FROM krry_blog ORDER BY create_time desc )RN )WN WHERE WN <= 10 AND WN > 0
語法較為復(fù)雜,
同樣的結(jié)果,mysql 的語法是:用一個 LIMIT 就可以解決。
SELECT id, title, create_time as createTime, musictor, musictitle FROM krry_blog ORDER BY create_time desc LIMIT 0,5
SSM 框架的搭建,就不多說了,以前的博客有詳細(xì)介紹,這里就談?wù)剬崿F(xiàn) java web 分頁的功能。
用到插件 js : krry_page.js,還有jQuery
mapper 持久層:
BlogMapper.java
package com.krry.mapper; import java.util.HashMap; import java.util.List; import com.krry.entity.Params; /** * * Mapper:操作數(shù)據(jù)庫 * @author krry * @version 1.0.0 * */ public interface BlogMapper { /** * 查詢所有博客 * @param params * @return */ public List<HashMap<String, Object>> findBlogs(Params params); /** * 計算博客數(shù)量 * com.krry.dao.admin * 方法名:countBlogs * @author krry * @param params * @return int * @exception * @since 1.0.0 */ public long countBlogs(); }
BlogMapper.xml
<?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.krry.mapper.BlogMapper" > <!-- 分頁查詢所有的博客信息 --> <select id="findBlogs" resultType="java.util.HashMap" parameterType="Params"> SELECT * FROM( SELECT ROWNUM WN,RN.* FROM ( SELECT id, title, create_time as createTime, musictor, musictitle FROM krry_blog ORDER BY create_time desc )RN )WN WHERE WN <= #{pageSize} AND WN > #{pageNo} </select> <!-- 查詢博客數(shù)量 --> <select id="countBlogs" resultType="long"> SELECT count(*) FROM krry_blog </select> </mapper>
service業(yè)務(wù)層:
接口類:IBlogService.java
package com.krry.service; import java.util.HashMap; import java.util.List; import javax.servlet.http.HttpServletRequest; import org.apache.ibatis.annotations.Param; import com.krry.entity.Blog; import com.krry.entity.Params; /** * service層:處理業(yè)務(wù)邏輯(impl里面實現(xiàn)) * @author asusaad * */ public interface IBlogService { /** * 分頁查詢所有博客 * @param params * @return */ public List<HashMap<String, Object>> findBlogs(Params params); /** * 計算博客數(shù)量 * @param params * @return */ public long countBlogs(); }
impl 實現(xiàn)類:BlogService.java
package com.krry.service.impl; import java.util.HashMap; import java.util.List; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import org.springframework.web.servlet.ModelAndView; import com.krry.entity.Params; import com.krry.mapper.BlogMapper; import com.krry.service.IBlogService; /** * 實現(xiàn)service層接口 * @author asusaad * */ @Service public class BlogService implements IBlogService{ @Autowired private BlogMapper blogMapper; /** * 查詢博客 */ public List<HashMap<String, Object>> findBlogs(Params params) { //查詢博客信息 List<HashMap<String, Object>> blog = blogMapper.findBlogs(params); return blog; } /** * 計算博客數(shù)量 * @param params * @return */ public long countBlogs(){ long coutBlogs = blogMapper.countBlogs(); return coutBlogs; } }
controller控制層:
KrryController.java
package com.krry.controller; import java.util.HashMap; import java.util.List; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.ResponseBody; import org.springframework.web.servlet.ModelAndView; import com.krry.entity.Params; import com.krry.service.IBlogService; /** * KrryController * controller層,作為請求轉(zhuǎn)發(fā) * @author asusaad * */ @Controller //表示是多例模式,每個用戶返回的web層是不一樣的 public class KrryController { @Autowired private IBlogService blogService; /** * 首頁,并且分頁查詢 * @return */ @RequestMapping("/index") public ModelAndView index(Params params){ params.setPageNo(0); params.setPageSize(10); //一開始只查詢10條 //調(diào)用業(yè)務(wù)層 List<HashMap<String, Object>> blogs = blogService.findBlogs(params); //查詢博客數(shù)量 long coutBlogs = blogService.countBlogs(); ModelAndView modelAndView = new ModelAndView(); modelAndView.addObject("blogs", blogs); modelAndView.addObject("coutBlogs", coutBlogs); modelAndView.setViewName("index"); return modelAndView; } /** * ajax請求 的 分頁查詢 * @param params * @return */ @ResponseBody @RequestMapping("/loadData") public HashMap<String, Object> loadData(Params params){ HashMap<String, Object> map = new HashMap<String, Object>(); List<HashMap<String, Object>> blogs = blogService.findBlogs(params); map.put("blogs", blogs); return map; } }
這里要有兩個實體類,作為數(shù)據(jù)庫查詢的注入 Blog,還有分頁查詢的兩個參數(shù) Params:
設(shè)置data參數(shù):pageNo(下一頁):就是當(dāng)前頁數(shù) * 下一頁要顯示的數(shù)量
pageSize(下一頁):已經(jīng)查詢出來的數(shù)量(pageNo) + 每頁要顯示的數(shù)量
在數(shù)據(jù)庫中是 WN <= pageSize and WN > pageNo 來查詢分頁數(shù)據(jù)
Blog.java
package com.krry.entity; /** * * User * @author krry * @version 1.0.0 * */ public class Blog { // 主鍵 private String id; //博客標(biāo)題 private String title; //音樂作者 private String musictor; //音樂標(biāo)題 private String musictitle; //創(chuàng)建時間 private String createTime; public Blog(String id, String title, String musictor, String musictitle, String createTime) { this.id = id; this.title = title; this.musictor = musictor; this.musictitle = musictitle; this.createTime = createTime; } public String getId() { return id; } public void setId(String id) { this.id = id; } public String getTitle() { return title; } public void setTitle(String title) { this.title = title; } public String getMusictor() { return musictor; } public void setMusictor(String musictor) { this.musictor = musictor; } public String getMusictitle() { return musictitle; } public void setMusictitle(String musictitle) { this.musictitle = musictitle; } public String getCreateTime() { return createTime; } public void setCreateTime(String createTime) { this.createTime = createTime; } }
Params.java
package com.krry.entity; /** * * Params * @author krry * @version 1.0.0 * */ public class Params { private Integer pageSize = 0; private Integer pageNo = 0; public Integer getPageNo() { return pageNo; } public void setPageNo(Integer pageNo) { this.pageNo = pageNo; } public Integer getPageSize() { return pageSize; } public void setPageSize(Integer pageSize) { this.pageSize = pageSize; } }
web 頁面 index.jsp
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%> <%@taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%> <% String path = request.getContextPath(); String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/"; pageContext.setAttribute("basePath", basePath); %> <!DOCTYPE HTML> <html> <head> <title>分頁</title> <style> body{background:url("resource/images/78788.jpg");background-size:cover;} .titless{font-size: 34px;text-align: center;color: black;margin-bottom: 16px;} .ke_tabbox{min-height:556px;width:900px;background:#f9f9f9;margin:20px auto 0;padding:6px;position:relative;} .ke_tabbox .sendMy{text-align: center; font-family: "微軟雅黑"; font-size: 28px; -webkit-text-fill-color: transparent; background: -webkit-gradient(linear,left top,left bottom,from(#FD8700),to(#FF00B1)); -webkit-background-clip: text; margin:8px auto 0;line-height: 35px;} .ke_tabbox .ke_table{width:100%;margin-top: 26px;} .ke_tabbox th{background:#ccc;font-weight:bold;} .ke_tabbox .ke_table td,th{overflow: hidden;white-space: nowrap;text-overflow: ellipsis;border:1px solid #fff;padding:4px 12px;color:#666;font-size:12px;} /*分頁相關(guān)*/ .tzPage{font-size: 12px;position: absolute;top: 480px;right: 0px;} #tbody tr:hover{background:#eaeaea;} #tbody .t_mode{padding-right:4px;} #tbody .t_avbiaoq:hover{color:#FF6857;transition:.4s} #tbody .t_dele{padding-left:4px;} .tzPage a{text-decoration:none;border:none;color:#7d7d7d;background-color:#f2f2f2;border-radius: 3px;} .tzPage a:hover{background:#dd5862;color:#FFF;} .tzPage a,.tzPage span{display:block;float:left;padding:0em 0.5em;margin-right:5px;margin-bottom:5px;min-width:1em;text-align:center;line-height: 22px;height: 22px;} .tzPage .current{background:#dd5862;color:#FFF;border:none;border-radius: 3px;} .tzPage .current.prev,.tzPage .current.next{color:#999;border:1px solid #e5e5e5;background:#fff;} .tm_psize_go{margin-right:4px;float:left;height:24px;line-height:33px;position:relative;border:1px solid #e5e5e5;color:#999} #tm_pagego{border-radius:3px;height:18px;width:30px;float:left;text-align:center;border:1px solid #e5e5e5;line-height: 22px;color:#999} .sortdesc{border-top:5px solid;width:0px;height:0px;display:inline-block;vertical-align:middle;border-right:5px solid transparent;border-left:5px solid transparent;margin-left:5px;} .sortasc{border-bottom:5px solid;width:0px;height:0px;display:inline-block;vertical-align:middle;border-right:5px solid transparent;border-left:5px solid transparent;margin-left:5px;} .red{color:red} .green{color:green} .hideAdd{height: 300px; text-align: center; line-height: 300px; margin-top: 16px;display:none;} .hideAdd a{font-size:28px;-webkit-text-fill-color:transparent;background: -webkit-gradient(linear,left top,left bottom,from(#FD0051),to(#A22C93));-webkit-background-clip: text;} </style> </head> <body> <div class="ke_tabbox"> <p class="titless">分頁展示</p> <table class="ke_table"> <thead> <tr> <th style="width:25%">標(biāo)題</th> <th style="width:25%">音樂人</th> <th style="width:30%">音樂標(biāo)題</th> <th style="width:20%">發(fā)布時間</th> </tr> </thead> <tbody id="tbody" data-itemcount="${coutBlogs}"> <c:forEach var="blog" items="${blogs}"> <tr> <td><a class="t_avbiaoq" title="${blog.TITLE}">${blog.TITLE}</a></td> <td><a class="t_avbiaoq" title="${blog.MUSICTOR}">${blog.MUSICTOR}</a></td> <td><a class="t_avbiaoq" title="${blog.MUSICTITLE}">${blog.MUSICTITLE}</a></td> <td>${blog.CREATETIME}</td> </tr> </c:forEach> </tbody> </table> <div id="krryPage"></div> </div> <script type="text/javascript" src="${basePath}/resource/js/jquery-1.11.3.min.js"></script> <script type="text/javascript" src="${basePath}/resource/js/krry_page.js"></script> <script type="text/javascript">var basePath = "${basePath}";</script> <script type="text/javascript"> var krryAdminBlog = { initPage:function(itemCount){ $("#krryPage").tzPage(itemCount, { num_display_entries : 5, //主體頁數(shù) num_edge_entries : 4,//邊緣頁數(shù) current_page : 0,//指明選中頁碼 items_per_page : 10, //每頁顯示多少條 prev_text : "上一頁", next_text : "下一頁", showGo:true,//顯示 showSelect:false, callback : function(pageNo, psize) {//會回傳兩個參數(shù),第一個是當(dāng)前頁數(shù),第二個是每頁要顯示的數(shù)量 krryAdminBlog.loadData(pageNo,psize); } }); }, //設(shè)置data參數(shù):pageNo(下一頁):就是當(dāng)前頁數(shù) * 下一頁要顯示的數(shù)量 // pageSize(下一頁):已經(jīng)查詢出來的數(shù)量(pageNo) + 每頁要顯示的數(shù)量 //在數(shù)據(jù)庫中是 WN <= pageSize and WN > pageNo 來查詢分頁數(shù)據(jù) loadData:function(pageNo,pageSize){ pageNo = pageNo * pageSize; pageSize = pageNo + 10; $.ajax({ type:"post", url:basePath+"/loadData", data:{pageNo:pageNo,pageSize:pageSize}, success:function(data){ if(data){ var html = ""; var blogArr = data.blogs; for(var i=0,len=blogArr.length;i < len;i++){ var json = blogArr[i]; html+= "<tr>"+ " <td><a class='t_avbiaoq' title='"+json.TITLE+"'>"+json.TITLE+"</a></td>"+ " <td><a class='t_avbiaoq' title='"+json.NAME+"'>"+json.MUSICTOR+"</a></td>"+ " <td><a class='t_avbiaoq' title='"+json.MUSICTITLE+"'>"+json.MUSICTITLE+"</a></td>"+ " <td>"+json.CREATETIME+"</td>"+ "</tr>"; } $("#tbody").html(html); } } }); } }; krryAdminBlog.initPage($("#tbody").data("itemcount")); </script> </body> </html>
分頁效果圖:
以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
@JsonProperty和@JSONField注解的區(qū)別解析(最新)
Jackson是一款優(yōu)秀的JSON解析庫,添加了依賴之后就可以使用對應(yīng)的注解,讓我們能夠自由的將Java對象和JSON做轉(zhuǎn)換,這篇文章主要介紹了@JsonProperty和@JSONField注解的區(qū)別,需要的朋友可以參考下2024-04-04Java?Elastic-Job分布式定時任務(wù)使用方法介紹
xxl-job?通過一個中心式的調(diào)度平臺,調(diào)度多個執(zhí)行器執(zhí)行任務(wù),調(diào)度中心通過?DB?鎖保證集群分布式調(diào)度的一致性,這樣擴(kuò)展執(zhí)行器會增大?DB?的壓力,然而大部分公司的任務(wù)數(shù),執(zhí)行器并不多;xxl-job?提供了非常好用的監(jiān)控頁面甚至還有任務(wù)失敗的郵件告警功能2023-01-01springboot配置請求超時時間(Http會話和接口訪問)
本文主要介紹了springboot配置請求超時時間,包含Http會話和接口訪問兩種,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2024-07-07