SSM中使用Mybatis的PageHelper插件实现分页

效果

实现

前言

前面实现SSM整合以及实现原始手动分页参考

https://blog.csdn.net/BADAO_LIUMANG_QIZHI/article/details/85113289

添加jar包

使用插件首先要先加载jar包

jar包下载:

https://download.csdn.net/download/badao_liumang_qizhi/10863649

将两个jar包,放到项目下的lib目录下。

修改applicationContext.xml

在sqlsession下增加

<property name="plugins">
            <array>
              <bean class="com.github.pagehelper.PageInterceptor">
                <property name="properties">
                  <!--使用下面的方式配置参数,一行配置一个 -->
                  <value>
                  </value>
                </property>
              </bean>
            </array>
</property>

完整代码

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:aop="http://www.springframework.org/schema/aop"
 xmlns:tx="http://www.springframework.org/schema/tx" xmlns:jdbc="http://www.springframework.org/schema/jdbc"
 xmlns:context="http://www.springframework.org/schema/context"
 xmlns:mvc="http://www.springframework.org/schema/mvc"
 xsi:schemaLocation="
     http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.0.xsd
     http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
     http://www.springframework.org/schema/jdbc http://www.springframework.org/schema/jdbc/spring-jdbc-3.0.xsd
     http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-3.0.xsd
     http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-3.0.xsd
     http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc.xsd">
 
 


   <context:annotation-config />
   <context:component-scan base-package="com.badao.service" />

 <bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource"> 
   <property name="driverClassName"> 
       <value>com.mysql.jdbc.Driver</value> 
   </property> 
   <property name="url"> 
       <value>jdbc:mysql://localhost:3306/ssmtest?characterEncoding=UTF-8</value> 
   </property> 
   <property name="username"> 
       <value>root</value> 
   </property> 
   <property name="password"> 
       <value>523627</value> 
   </property>   
 </bean>
 
 
 <bean id="sqlSession" class="org.mybatis.spring.SqlSessionFactoryBean">
  <property name="typeAliasesPackage" value="com.badao.pojo" />
  <property name="dataSource" ref="dataSource"/>
  <property name="mapperLocations" value="classpath:com/badao/mapper/*.xml"/>
  <property name="plugins">
            <array>
              <bean class="com.github.pagehelper.PageInterceptor">
                <property name="properties">
                  <!--使用下面的方式配置参数,一行配置一个 -->
                  <value>
                  </value>
                </property>
              </bean>
            </array>
          </property>  
 </bean>

 <bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">
  <property name="basePackage" value="com.badao.mapper"/>
 </bean>



</beans>

修改service

Service中去掉total方法和原来手动分页的方法

package com.badao.service;

import java.util.List;

import com.badao.pojo.User;
import com.badao.util.Page;

public interface UserService {
 List<User> selectAllUser();
 //List<User> selectAllUser(Page page);
 //int total();

}

修改serviceImpl

注释掉原来的手动分页方法

package com.badao.service.impl;

import java.util.List;

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

import com.badao.mapper.UserMapper;
import com.badao.pojo.User;
import com.badao.service.UserService;
import com.badao.util.Page;
@Service
public class UserServiceImpl implements UserService {

 @Autowired
 UserMapper userMapper;
 public List<User> selectAllUser() {
  // TODO Auto-generated method stub
  return userMapper.selectAllUser();
 }
/* @Override
 public List<User> selectAllUser(Page page) {
  // TODO Auto-generated method stub
  return userMapper.selectAllUser(page);
 }
 @Override
 public int total() {
  // TODO Auto-generated method stub
  return userMapper.total();
 }*/

}


修改mapper

userMapper.java中注释掉total()方法以及原来的手动分页的方法。

package com.badao.mapper;

import java.util.List;
import com.badao.pojo.User;
import com.badao.util.Page;



public interface UserMapper {
 public int addUser(User user);
 public User selectUser(int id);
 public int updateUser(User user);
 public void deleteUser(int id);
 public List<User> selectAllUser();
 //public List<User> selectAllUser(Page page);
 //public int total();
 
}

userMapper.xml中去掉total的select语句以及原来的limit语句

<?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.badao.mapper.UserMapper">
        <insert id="addUser" parameterType="User" >
            insert into user ( name,age ) values (#{name},#{age})  
        </insert>
        
        <delete id="deleteUser" parameterType="_int" >
            delete from user where id= #{id} 
        </delete>
        
        <select id="selectUser" parameterType="_int" resultType="User">
            select * from   user  where id= #{id}  
        </select>
 
        <update id="updateUser" parameterType="User" >< BR>           updateusersetname=#{name},age=#{age} where id=#{id}  
        </update>
        <select id="selectAllUser" resultType="User">
            select * from   user    <BR>           <!--<iftest="start!=null and count!=null">
             limit #{start},#{count}
            </if> -->
        </select>
        <!-- <select id="total" resultType="int">
         select count(*) from user
        </select>     -->
    </mapper>

修改Controller

通过

import com.github.pagehelper.PageHelper;
import com.github.pagehelper.PageInfo;

导入类

通过

PageHelper.offsetPage(page.getStart(),5);

实现分页按需查询

通过

int total = (int) new PageInfo<>(cs).getTotal();

获取查询的总数

完整代码

package com.badao.controller;

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.servlet.ModelAndView;

import com.badao.pojo.User;
import com.badao.service.UserService;
import com.badao.util.Page;
import com.github.pagehelper.PageHelper;
import com.github.pagehelper.PageInfo;



// 告诉spring mvc这是一个控制器类
@Controller
@RequestMapping("")
public class UserController {
 @Autowired
 UserService userService;

 @RequestMapping("listUser")
 public ModelAndView listUser(Page page){
  ModelAndView mav = new ModelAndView();
  //根据分页对象,进行查询获取查询对象集合
  //List<User> cs= userService.selectAllUser(page);
  //int total = userService.total();
  //根据总数,计算最后一页的信息
  
   PageHelper.offsetPage(page.getStart(),5);
      List<User> cs= userService.selectAllUser();
      int total = (int) new PageInfo<>(cs).getTotal();
      page.caculateLast(total);
  // 放入转发参数
  mav.addObject("userList", cs);
  // 放入jsp路径
  mav.setViewName("listUser");
  return mav;
 }

}

修改测试类

注释掉原来的的手动分页实现时的单元测试代码

package com.badao.test;

import java.util.List;

import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.test.annotation.Rollback;
import org.springframework.test.context.ContextConfiguration;
import com.badao.mapper.UserMapper;
import com.badao.pojo.User;
import com.badao.util.Page;
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;//使用junit4时报错导这个包
@RunWith(SpringJUnit4ClassRunner.class)//使用junit4进行测试
@ContextConfiguration("classpath:applicationContext.xml")//加载配置文件
public class InsertTest {
 @Autowired//自动注入
 private UserMapper userMapper;
  @Test//标明是测试方法
  @Rollback(false)  //标明使用完此方法后事务不回滚,true时为回滚
  public void testAdd() {
         for (int i = 0; i < 100; i++) {
          User user = new User();
          user.setName("user"+i);
             userMapper.addUser(user);
         }
 
     }
     
   /*  @Test
     public void testTotal() {
         int total = userMapper.total();
         System.out.println(total);
     }
 
     @Test
     public void testList() {
         Page p = new Page();
         p.setStart(2);
         p.setCount(3);
         List<User> cs=userMapper.selectAllUser(p);
         for (User c : cs) {
             System.out.println(c.getName());
         }
     }*/
}

jsp页面代码

保持不变

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8" import="java.util.*"%>
 
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%>

<%
 pageContext.setAttribute("APP_PATH", request.getContextPath());
%>
<!DOCTYPE html>
<html>
<head>
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
    <title>查询所有用户</title>
</head>

<script type="text/javascript" src="${APP_PATH }/static/js/jquery-1.12.4.min.js"></script>
<link href="${APP_PATH }/static/bootstrap-3.3.7-dist/css/bootstrap.min.css" rel="stylesheet">
<script src="${APP_PATH }/static/bootstrap-3.3.7-dist/js/bootstrap.min.js"></script>
<body>
<table align='center' border='1' cellspacing='0' class="table table-bordered"
    <th >
        <td>id</td>
        <td>name</td>
        <td>age</td>
    </th>
    <c:forEach items="${userList}" var="u">
        <tr class="active">
            <td >${u.id}</td>
            <td>${u.name}</td>
            <td>${u.age}</td>
              
        </tr>
    </c:forEach>
</table>
<div style="text-align:center">
        <a href="?start=0">首  页</a>
        <a href="?start=${page.start-page.count}">上一页</a>
        <a href="?start=${page.start+page.count}">下一页</a>
        <a href="?start=${page.last}">末  页</a>
</div>
  </body>
</html>

源码下载

https://download.csdn.net/download/badao_liumang_qizhi/10863821


 

猜你喜欢

转载自blog.csdn.net/BADAO_LIUMANG_QIZHI/article/details/85115731