1.1 项目中使用PageHelper

1.1.1 第一步:添加依赖

1.1.2 第二步:在applicationContext.xml中配置拦截器插件

  • <!--3. 创建SqlSessionFactoryBean,注入连接池-->
        <bean class="org.mybatis.spring.SqlSessionFactoryBean">
            <property name="dataSource" ref="dataSource"></property>
            <!--PageHelper分页插件-->
            <property name="plugins">
                <array>
                    <bean class="com.github.pagehelper.PageInterceptor">
                        <property name="properties">
                            <props>
                                <prop key="helperDialect">oracle</prop>
                                <prop key="reasonable">true</prop>
                            </props>
                        </property>
                    </bean>
                </array>
            </property>

    </bean>

  • 完整applicationContext.xml配置
<?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:context="http://www.springframework.org/schema/context" xmlns:tx="http://www.springframework.org/schema/tx"xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx.xsd"><!--1.扫描service包--><context:component-scan base-package="com.sunny.service"></context:component-scan><!--加载jdbc.properties配置文件--><context:property-placeholder location="classpath:jdbc.properties"></context:property-placeholder><!--2. 创建连接池--><bean id="dataSource" class="com.alibaba.druid.pool.DruidDataSource"><property name="driverClassName" value="${jdbc.driver}"></property><property name="url" value="${jdbc.url}"></property><property name="username" value="${jdbc.username}"></property><property name="password" value="${jdbc.password}"></property><property name="initialSize" value="${jdbc.initialSize}"></property><property name="maxActive" value="${jdbc.maxActive}"></property></bean><!--3. 创建SqlSessionFactoryBean,注入连接池--><bean class="org.mybatis.spring.SqlSessionFactoryBean"><property name="dataSource" ref="dataSource"></property><!--PageHelper分页插件--><property name="plugins"><array><bean class="com.github.pagehelper.PageInterceptor"><property name="properties"><props><prop key="helperDialect">oracle</prop><prop key="reasonable">true</prop></props></property></bean></array></property></bean><!--4. 创建包扫描器,指定扫描的dao接口所在包--><bean class="org.mybatis.spring.mapper.MapperScannerConfigurer"><property name="basePackage" value="com.sunny.dao"></property></bean><!--5. Spring提供的事务管理器--><bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager"><property name="dataSource" ref="dataSource"></property></bean><!--6. 开启声明式事务注解支持--><tx:annotation-driven transaction-manager="transactionManager"></tx:annotation-driven><!--7. 加载其他的配置文件--><import resource="classpath:spring-security.xml"/>
</beans>

2. 订单分页

  • Oracle中创建订单表的SQL语句:-- 订单表
    CREATE TABLE orders(
        id int PRIMARY KEY,
        orderNum VARCHAR2(20) NOT NULL UNIQUE,
        orderTime date,
        peopleCount INT,
        orderDesc VARCHAR2(500),
        payType INT,
        orderStatus INT,
        productId int,
        FOREIGN KEY (productId) REFERENCES product(id)
    );
  • 实体类Order

2.1 dao

使用PageHelper分页,dao只需要查询全部,不需要手动写分页SQL。

dao查询方法已经有了:

  • -- product与Orders一对一关系查询
    select o.id oid,o.ordernum,o.ordertime,o.peoplecount,o.orderdesc,
    o.paytype,o.orderstatus,o.productid,p.* from orders o inner join  product p  on o.productid=p.id;
/*** 使用PageHelper分页,dao只需要查询全部,不需要手动写SQL。*/
public interface IOrderDao {/*** 查询全部*/@Select("select o.id oid,o.ordernum,o.ordertime,o.peoplecount,o.orderdesc,o.paytype,o.orderstatus\n" +",p.* from orders o inner join product p on o.productid=p.id")@Results({// 订单信息,只要指定id列与属性的映射关系,其他列会自动封装(属性与列一致)@Result(property = "id", column = "oid"),// 产品信息@Result(property = "product.id", column = "id"),@Result(property = "product.productNum", column = "productNum"),@Result(property = "product.productName", column = "productName"),@Result(property = "product.cityName", column = "cityName"),@Result(property = "product.departureTime", column = "departureTime"),@Result(property = "product.productPrice", column = "productPrice"),@Result(property = "product.productDesc", column = "productDesc"),@Result(property = "product.productStatus", column = "productStatus"),})List<Order> findAll();}

2.2 service接口、实现

2.2.1 service接口

public interface IOrderService {/*** 查询全部*/List<Order> findAll();/*** 分页查询* @param pageNum  当然页* @param pageSize 页大小* @return 返回PageHelper提供的封装分页参数的PageInfo对象*/PageInfo<Order> findByPage(int pageNum, int pageSize);
}

2.2.2 service实现

@Service
@Transactional
public class OrderServiceImpl implements IOrderService {// 注入dao@Autowiredprivate IOrderDao orderDao;@Overridepublic List<Order> findAll() {return orderDao.findAll();}@Overridepublic PageInfo<Order> findByPage(int pageNum, int pageSize) {// 分页查询(紧跟在其后的第一条查询sql将会被分页)PageHelper.startPage(pageNum,pageSize);// 查询全部List<Order> list = orderDao.findAll();// 返回结果PageInfo<Order> pageInfo = new PageInfo<>(list);return pageInfo;}
}

2.3 Controller

@Controller
@RequestMapping("/order")
public class OrderController {// 注入service@Autowiredprivate IOrderService orderService;/*** 1.查询全部*/@RequestMapping("/findAll")public ModelAndView findAll() {//1.1 调用serviceList<Order> list = orderService.findAll();//1.2 返回结果ModelAndView mv = new ModelAndView();mv.setViewName("order-list");mv.addObject("list", list);return mv;}@RequestMapping("/findByPage")public ModelAndView findByPage(@RequestParam(defaultValue = "1") int pageNum,@RequestParam(defaultValue = "2") int pageSize) {//1.1 调用servicePageInfo<Order> pageInfo = orderService.findByPage(pageNum, pageSize);//1.2 返回结果ModelAndView mv = new ModelAndView();mv.setViewName("order-list");mv.addObject("pageInfo", pageInfo);return mv;}
}

2.4 简单测试

  • --- (1)批量插入Order表数据脚本
    declare
    i integer;
    begin
    i := 1;
    loop
      INSERT INTO orders VALUES(i,'O9'||i,
      to_date('2018-09-09 20:10','yyyy-MM-dd HH24:mi'),3,'无',1,1,1);
    /* 参数递增 */
    i := i + 1;
    /* 停止条件 */
    exit when i > 50;
    end loop;
    commit;
    end;

    -- 查看
    select * from orders;

2.5 order-list.jsp

2.4.1 分页达到的效果

页面效果:只显示当前页前后5页的页码。最多显示的页码共11个。

2.6 分页设计

  1. 因为每一个模块的列表都要求有分页,所以把分页的公共代码抽取出去放到page.jsp
  2. 其它模块如果要分页,直接引入page.jsp页面即可。

2.7 page.jsp

分页条公用页面

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %><div class="box-footer"><div class="pull-left"><div class="form-group form-inline">总共${pageInfo.pages}页,共${pageInfo.total} 条数据。每页<select class="form-control" onchange="gotoPage(1,this.value)"><c:forEach var="temp" begin="1" end="10"><option ${pageInfo.pageSize==temp?'selected':''} value="${temp}">${temp}</option></c:forEach></select>条</div></div><div class="box-tools pull-right"><ul class="pagination"><li><a href="javascript:gotoPage(1,'${pageInfo.pageSize}')" aria-label="Previous">首页</a></li><li><a href="javascript:gotoPage('${pageInfo.prePage}','${pageInfo.pageSize}')">上一页</a></li><%--处理页码--%><c:forEach var="num"begin="${(pageInfo.pageNum-5>0?(pageInfo.pageNum-5):1)}"end="${(pageInfo.pageNum+5<=pageInfo.pages)?(pageInfo.pageNum+5):pageInfo.pages}"><li><a href="javascript:gotoPage('${num}','${pageInfo.pageSize}')"><%--判断:主要是为了给当前页显示红色--%><c:choose><c:when test="${num==pageInfo.pageNum}"><span style="color: red">${num}</span></c:when><c:otherwise>${num}</c:otherwise></c:choose></a></li></c:forEach><li><a href="javascript:gotoPage('${pageInfo.nextPage}','${pageInfo.pageSize}')">下一页</a></li><li><a href="javascript:gotoPage('${pageInfo.pages}','${pageInfo.pageSize}')" aria-label="Next">尾页</a></li></ul></div></div><script type="text/javascript">//分页的方法//参数1:当然页//参数2:页大小function gotoPage(pageNum,pageSize){// 给表单隐藏域赋值$("#pageNum").val(pageNum);$("#pageSize").val(pageSize);// 提交表单// document.forms[0] 获取页面的第一个表单document.forms[0].submit();}
</script>

2.8 order-list.jsp页面

如果页面要分页,只需要引入下面代码即可:

2.9 测试

在项目中使用PageHelper实现分页功能相关推荐

  1. php第三方登录代码,thinkPHP5项目中实现QQ第三方登录功能

    本文实例讲述了thinkPHP5项目中实现QQ第三方登录功能.分享给大家供大家参考,具体如下: 最近用thinkPHP 5框架做了一个婚纱店的项目,在开发过程中需要用到第三方登录,腾讯官方给的案例是几 ...

  2. 在项目中配置PageHelper插件时遇到类型转换异常

    在项目中配置PageHelper插件时遇到类型转换异常 参考文章: (1)在项目中配置PageHelper插件时遇到类型转换异常 (2)https://www.cnblogs.com/dubhlinn ...

  3. 第83节:Java中的学生管理系统分页功能

    第83节:Java中的学生管理系统分页功能 分页功能一般可以做成两种,一种是物理分页,另一种是逻辑分页.这两种功能是有各自的特点的,物理分页是查询的时候,对数据库进行访问,只是查一页数据就进行返回,其 ...

  4. 中软培训-实现分页功能

    中软培训-实现分页功能 实体类pojo public class PageInfo<T> {private int currentPage; //当前页面private int pageS ...

  5. (解决)除非另外还指定了 TOP、OFFSET 或 FOR XML,否则,ORDER BY 子句在视图、内联函数、派生表、子查询和公用表表达式中无效Mybatis-plus 默认分页功能报错

    (解决)除非另外还指定了 TOP.OFFSET 或 FOR XML,否则,ORDER BY 子句在视图.内联函数.派生表.子查询和公用表表达式中无效Mybatis-plus 默认分页功能报错 我百度了 ...

  6. 在Springboot中使用pagehelper实现分页管理

    我们在开发Web应用时,经常会使用到分页. 如果你也在用 MyBatis,建议尝试该分页插件pagehelper,这一定是最方便使用的分页插件.分页插件支持任何复杂的单表.多表分页. 官网地址:htt ...

  7. react项目中实现打印预览功能

    最近项目中,前端采用react+antd+dva的组合, 今天有一个新需求, 需要在后台管理系统中实现 点击打印 完成指定页面的打印功能. 我们道浏览器带有打印功能的实现,window.print() ...

  8. vue项目中图标可拖拽功能实现

    vue项目中页面实现图标拖拽功能 最近在做项目需求时有个小功能:在页面的首页增加一个快速功能按钮,用来满足操作者快速实现某一目的渴望.为了体现代码搬运工的气质与水准,当时心想,这么简单的一个小东西必须 ...

  9. spring boot中使用Pagehelper实现分页

    1.引入依赖 <dependency><groupId>com.github.pagehelper</groupId><artifactId>pageh ...

最新文章

  1. 卷毛机器人抢大龙视频_腾讯这一措施,又砸碎了一些小企业的饭碗,QQ机器人成为历史...
  2. 「NLP」ALBERT:更轻更快的NLP预训练模型
  3. Z 字形变换 C++实现 java实现 leetcode系列(六)
  4. python做图像处理快不快_Python 图像读写谁最快?不信就比一比
  5. 在伦敦工作生活—随笔-1
  6. python中yield的用法详解——最简单,最清晰的解释(转载)
  7. 我那个37岁的大神朋友,后续
  8. android自定义选年控件,Android精美日历控件CalendarView自定义使用完全解析
  9. 启动之后自己关闭_如何关闭Mac开机总是要输入密码?
  10. Linux(RedHat)下Weblogic 12C静默安装
  11. 重庆高考成绩查询2021时间几号,2021重庆高考时间是几号
  12. 升职加薪,必不可少!Python刷题打怪,你要的LeetCode答案都在这里了!
  13. 华为2019秋招笔试题2
  14. Java--实现简单的音频(mp3格式)播放
  15. java 大写中文金额 转 数字
  16. 使用JavaCV实现海康rtsp转rtmp实现无插件web端直播(无需转码,低资源消耗)
  17. 955 不加班的公司名单:955.WLB
  18. css自动换行(转载)
  19. 计算机网络重装死锁,网络中的路由和死锁.ppt
  20. 虚拟偶像2022:复制下一个A-SOUL?

热门文章

  1. 关于STL模板的使用效率与控制输出时最后不加空格问题
  2. 概率论与数理统计---基本概念
  3. 最简单的太阳能光伏发电系统
  4. 上帝 谭卓 马加爵等人的对话
  5. 全球虚拟运营商发展现状与探索
  6. mysql intersect 使用方法_MySQL INTERSECT运算符
  7. # 设置防火墙白名单
  8. 《Javascript高级程序设计》--读书笔记(一)
  9. 广播风暴产生的原因及处理!
  10. android 寺库trytry_人民日报中秋福利 寺库trytry红包刷爆朋友圈背后的秘密