java ssm框架实现分页功能的示例代码(oracle)

作者:筱月 时间:2021-10-31 01:14:40 

java web 实现分页功能,分享给大家,具体如下:

使用框架:ssm

数据库:oracle

话说 oracle 的分页查询比 mysql 复杂多了,在这里简单谈一下:

查询 前十条数据:


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

语法较为复杂,

同样的结果,mysql 的语法是:用一个 LIMIT 就可以解决。


SELECT
id,
title,
create_time as createTime,
musictor,
musictitle
FROM
krry_blog
ORDER BY create_time desc
LIMIT 0,5

 SSM 框架的搭建,就不多说了,以前的博客有详细介绍,这里就谈谈实现 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:操作数据库
* @author krry
* @version 1.0.0
*
*/
public interface BlogMapper {

/**
* 查询所有博客
* @param params
* @return
*/
public List<HashMap<String, Object>> findBlogs(Params params);

/**
* 计算博客数量
* 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 &lt;= #{pageSize} AND WN &gt; #{pageNo}
</select>

<!-- 查询博客数量 -->
<select id="countBlogs" resultType="long">
SELECT
 count(*)
FROM
 krry_blog
</select>
</mapper>

service业务层:

接口类: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层:处理业务逻辑(impl里面实现)
* @author asusaad
*
*/
public interface IBlogService {
/**
* 分页查询所有博客
* @param params
* @return
*/
public List<HashMap<String, Object>> findBlogs(Params params);

/**
* 计算博客数量
* @param params
* @return
*/
public long countBlogs();
}

impl 实现类: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;
/**
* 实现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;
}

/**
* 计算博客数量
* @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层,作为请求转发
* @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条
//调用业务层
List<HashMap<String, Object>> blogs = blogService.findBlogs(params);
//查询博客数量
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;
}
}

这里要有两个实体类,作为数据库查询的注入 Blog,还有分页查询的两个参数 Params:

设置data参数:pageNo(下一页):就是当前页数 * 下一页要显示的数量
   pageSize(下一页):已经查询出来的数量(pageNo) + 每页要显示的数量

在数据库中是 WN <= pageSize and WN > pageNo 来查询分页数据

Blog.java


package com.krry.entity;
/**
*
* User
* @author krry
* @version 1.0.0
*
*/
public class Blog {
// 主键
private String id;
//博客标题
private String title;
//音乐作者
private String musictor;
//音乐标题
private String musictitle;
//创建时间
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;}
  /*分页相关*/
  .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%">标题</th>
    <th style="width:25%">音乐人</th>
    <th style="width:30%">音乐标题</th>
    <th style="width:20%">发布时间</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, //主体页数
    num_edge_entries : 4,//边缘页数
    current_page : 0,//指明选中页码
    items_per_page : 10, //每页显示多少条
    prev_text : "上一页",
    next_text : "下一页",
    showGo:true,//显示
    showSelect:false,
    callback : function(pageNo, psize) {//会回传两个参数,第一个是当前页数,第二个是每页要显示的数量
     krryAdminBlog.loadData(pageNo,psize);
    }
   });
  },
  //设置data参数:pageNo(下一页):就是当前页数 * 下一页要显示的数量
  //   pageSize(下一页):已经查询出来的数量(pageNo) + 每页要显示的数量
  //在数据库中是 WN <= pageSize and WN > pageNo 来查询分页数据
  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>

分页效果图:

java ssm框架实现分页功能的示例代码(oracle)

来源:http://www.cnblogs.com/ainyi/p/8598217.html

标签:ssm框架,分页
0
投稿

猜你喜欢

  • 关于Mybatis-Plus字段策略与数据库自动更新时间的一些问题

    2023-08-05 20:44:22
  • Java异常处理机制try catch流程详解

    2022-09-23 08:51:09
  • 通过实例解析Spring argNames属性

    2023-09-14 10:43:13
  • c# 获取CookieContainer的所有cookies函数代码

    2023-06-17 23:11:30
  • Java代码实现酒店管理系统

    2023-08-13 13:09:23
  • 利用Springboot+Caffeine实现本地缓存实例代码

    2022-05-31 09:13:33
  • 浅谈Java(SpringBoot)基于zookeeper的分布式锁实现

    2023-11-16 08:14:56
  • 一篇文章带你了解JAVA结构化编程详情

    2022-01-15 13:06:34
  • java中lambda表达式简单用例

    2023-11-24 23:17:52
  • java实现短信验证码5分钟有效时间

    2023-08-30 18:42:26
  • springmvc如何使用map接收参数

    2023-11-28 04:49:17
  • 详解解密Java中的类型转换问题

    2023-11-24 20:46:28
  • java中URLEncoder.encode与URLDecoder.decode处理url特殊参数的方法

    2022-05-22 05:32:00
  • windows 部署JAVA环境安装iDea的详细步骤

    2022-10-09 01:09:26
  • 实战SpringBoot集成JWT实现token验证

    2022-10-07 15:57:49
  • Java数据结构之优先级队列(PriorityQueue)用法详解

    2023-11-18 13:00:50
  • Java实现简单台球游戏

    2022-06-28 23:55:59
  • 使用Java桥接模式打破继承束缚优雅实现多维度变化

    2023-08-23 09:00:34
  • 使用IDEA搭建SSM框架的详细教程(spring + springMVC +MyBatis)

    2023-04-24 07:35:45
  • Android异步消息机制详解

    2023-08-07 09:42:52
  • asp之家 软件编程 m.aspxhome.com