怎么在java中使用ssm框架实现一个分页功能

怎么在java中使用ssm框架实现一个分页功能?相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。

创新互联长期为上1000家客户提供的网站建设服务,团队从业经验10年,关注不同地域、不同群体,并针对不同对象提供差异化的产品和服务;打造开放共赢平台,与合作伙伴共同营造健康的互联网生态环境。为固原企业提供专业的网站制作、成都网站制作,固原网站改版等技术服务。拥有10年丰富建站经验和众多成功案例,为您定制开发。

使用框架: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> findBlogs(Params params);
 
 /**
 * 计算博客数量
 * com.krry.dao.admin 
 * 方法名:countBlogs
 * @author krry 
 * @param params
 * @return int
 * @exception 
 * @since 1.0.0
 */
 public long countBlogs(); 
}

BlogMapper.xml



 
 
 
 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
  count(*)
 FROM
  krry_blog
  

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> 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> findBlogs(Params params) {
 
 //查询博客信息
 List> 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> 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 loadData(Params params){
 
 HashMap map = new HashMap();
 List> 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);
%>



 
 分页
 
 
 
 
  
   分页展示

                 标题      音乐人      音乐标题      发布时间                                   ${blog.TITLE}       ${blog.MUSICTOR}       ${blog.MUSICTITLE}       ${blog.CREATETIME}                     
 
     var basePath = "${basePath}";        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+= ""+         " "+json.TITLE+""+         " "+json.MUSICTOR+""+         " "+json.MUSICTITLE+""+         " "+json.CREATETIME+""+         "";        }        $("#tbody").html(html);       }      }     });    }   };      krryAdminBlog.initPage($("#tbody").data("itemcount"));       

看完上述内容,你们掌握怎么在java中使用ssm框架实现一个分页功能的方法了吗?如果还想学到更多技能或想了解更多相关内容,欢迎关注创新互联行业资讯频道,感谢各位的阅读!


文章标题:怎么在java中使用ssm框架实现一个分页功能
网站URL:http://azwzsj.com/article/ghgdhd.html

其他资讯