java ssm框架實(shí)現(xiàn)分頁功能的示例代碼(oracle)
java web 實(shí)現(xiàn)分頁功能,分享給大家,具體如下:
使用框架:ssm
數(shù)據(jù)庫:oracle
話說 oracle 的分頁查詢比 mysql 復(fù)雜多了,在這里簡(jiǎn)單談一下:
查詢 前十條數(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 的語法是:用一個(gè) LIMIT 就可以解決。
SELECT id, title, create_time as createTime, musictor, musictitle FROM krry_blog ORDER BY create_time desc LIMIT 0,5
SSM 框架的搭建,就不多說了,以前的博客有詳細(xì)介紹,這里就談?wù)剬?shí)現(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);
/**
* 計(jì)算博客數(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里面實(shí)現(xiàn))
* @author asusaad
*
*/
public interface IBlogService {
/**
* 分頁查詢所有博客
* @param params
* @return
*/
public List<HashMap<String, Object>> findBlogs(Params params);
/**
* 計(jì)算博客數(shù)量
* @param params
* @return
*/
public long countBlogs();
}
impl 實(shí)現(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;
/**
* 實(shí)現(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;
}
/**
* 計(jì)算博客數(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層,作為請(qǐng)求轉(zhuǎn)發(fā)
* @author asusaad
*
*/
@Controller //表示是多例模式,每個(gè)用戶返回的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請(qǐng)求 的 分頁查詢
* @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;
}
}
這里要有兩個(gè)實(shí)體類,作為數(shù)據(jù)庫查詢的注入 Blog,還有分頁查詢的兩個(gè)參數(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)建時(shí)間
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ā)布時(shí)間</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) {//會(huì)回傳兩個(gè)參數(shù),第一個(gè)是當(dāng)前頁數(shù),第二個(gè)是每頁要顯示的數(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>
分頁效果圖:

以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
@JsonProperty和@JSONField注解的區(qū)別解析(最新)
Jackson是一款優(yōu)秀的JSON解析庫,添加了依賴之后就可以使用對(duì)應(yīng)的注解,讓我們能夠自由的將Java對(duì)象和JSON做轉(zhuǎn)換,這篇文章主要介紹了@JsonProperty和@JSONField注解的區(qū)別,需要的朋友可以參考下2024-04-04
JavaWeb實(shí)現(xiàn)文件上傳下載功能實(shí)例詳解
這篇文章主要介紹了JavaWeb中的文件上傳和下載功能的實(shí)現(xiàn),在開發(fā)中,文件上傳和下載功能是非常常用的功能,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2016-11-11
Java中通過Class類獲取Class對(duì)象的方法詳解
這篇文章主要給大家介紹了關(guān)于Java中通過Class類獲取Class對(duì)象的方法,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家學(xué)習(xí)或者使用java具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面跟著小編來一起學(xué)習(xí)學(xué)習(xí)吧。2017-08-08
Java?Elastic-Job分布式定時(shí)任務(wù)使用方法介紹
xxl-job?通過一個(gè)中心式的調(diào)度平臺(tái),調(diào)度多個(gè)執(zhí)行器執(zhí)行任務(wù),調(diào)度中心通過?DB?鎖保證集群分布式調(diào)度的一致性,這樣擴(kuò)展執(zhí)行器會(huì)增大?DB?的壓力,然而大部分公司的任務(wù)數(shù),執(zhí)行器并不多;xxl-job?提供了非常好用的監(jiān)控頁面甚至還有任務(wù)失敗的郵件告警功能2023-01-01
springboot配置請(qǐng)求超時(shí)時(shí)間(Http會(huì)話和接口訪問)
本文主要介紹了springboot配置請(qǐng)求超時(shí)時(shí)間,包含Http會(huì)話和接口訪問兩種,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2024-07-07

