本文例程下载:https://files.cnblogs.com/files/xiandedanteng/agumaster20200430-1.zip

之前的分页方案有点小瑕疵,这回修正了一下。

控制类:

package com.ufo.hy.agumaster.ctrl;

import java.util.List;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam; import com.ufo.hy.agumaster.dao.StockMapper;
import com.ufo.hy.agumaster.entity.Stock; @Controller
public class ActionController {
@Autowired
private StockMapper stockMapper=null; /**
*
* @param m:model
* @param pageNo:page number
* @param pageSize:how many records in a page
* @param keyword:key word
* @return
*/
@RequestMapping("/liststock")
public String liststock(Model m,@RequestParam(value="pageNo",defaultValue="0") int pageNo,
@RequestParam(value="pageSize",defaultValue="20") int pageSize,
@RequestParam(value="keyword",defaultValue="") String keyword) { int start=pageNo*pageSize;
int end=start+pageSize;
List<Stock> list=stockMapper.pagedSearch(start, end,keyword);
m.addAttribute("list", list); int count=stockMapper.getPagedSearchCount(keyword);
int pageCount=count/pageSize;
m.addAttribute("pageCount", pageCount); m.addAttribute("pageNo", pageNo); return "liststock";
}
}

Mapper类:

package com.ufo.hy.agumaster.dao;

import java.util.List;

import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;
import org.apache.ibatis.annotations.Select;
import org.apache.ibatis.annotations.SelectProvider; import com.ufo.hy.agumaster.entity.Stock; @Mapper
public interface StockMapper { /**
* Paged search stocks
* @param start:Start line
* @param end: End line
* @param keyword: Search keyword
* @return
*/
@SelectProvider(type=StockSql.class,method="pagedSearch")
List<Stock> pagedSearch(int start,int end,String keyword); /**
* get all records' count of pagedSearch
* @param keyword
* @return
*/
@Select("select count(*) from hy_stock where name like '%${keyword}%' or code like '%${keyword}%' ")
int getPagedSearchCount(@Param("keyword") String keyword);
}

分页SQL:

package com.ufo.hy.agumaster.dao;

public class StockSql {
public String pagedSearch(int start,int end,String keyword) {
StringBuilder sb = new StringBuilder(); sb.append(" select b.* from ");
sb.append(" (select a.*,rownum as rn from ");
sb.append(" (select * from hy_stock where name like '%"+keyword+"%' or code like '%"+keyword+"%' order by id) a ");
sb.append(" where rownum<="+end+") b ");
sb.append(" where b.rn>"+start+" "); return sb.toString();
}
}

页面:

<!DOCTYPE html>
<html xmlns:th="http://www.thymeleaf.org">
<head>
<meta charset="UTF-8">
<title>List Stocks</title>
</head>
<body>
<div>
共:<span th:text="${pageCount}">pageCount</span>页
当前第:<span th:text="${pageNo}">pageIndex</span>页
</div> <table border="0px" width="160px">
<tr><td colspan="10"><input type="text" /></td></tr>
<tr>
<td><a th:href="@{/liststock?pageNo=1&pageSize=20}">首页</a></td>
<td><a th:href="'/liststock?pageNo=' + ${pageCount} +'&pageSize=20' ">末页</a></td>
<td>
<a th:if="${pageNo ne 1}" th:href="'/liststock?pageNo=' + ${pageNo - 1} +'&pageSize=20' ">上页</a>
<span th:if="${pageNo eq 1}">上页</span>
</td>
<td>
<a th:if="${pageNo ne pageCount}" th:href="'/liststock?pageNo=' + ${pageNo + 1} +'&pageSize=20' ">下页</a>
<span th:if="${pageNo eq pageCount}">下页</span>
</td>
</tr>
</table> <table border="1px" width="160px">
<caption>All Stocks</caption>
<thead>
<tr><th>id</th><th>code</th><th>name</th></tr>
</thead>
<tbody>
<tr th:each="item:${list}">
<td th:text="${item.id}">id</td>
<td th:text="${item.code}">name</td>
<td th:text="${item.name}">salary</td>
</tr>
</tbody>
</table>
</body>
</html>

结果:

本例还增加了热启动部署:

        <!-- Hot deployment -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-devtools</artifactId>
</dependency>

另外将 application.properties 中内容改为:

spring.profiles.active=oracle

而增加了文件application-oracle.properties,其中内容是:

spring.profiles.active=oracle

spring.datasource.url=jdbc:oracle:thin:@dev-dm-XXXXX1z.dev.jp.local:2050/SV_TRTMSAPDB
spring.datasource.username=RTMXXXXMIN2
spring.datasource.password=teXXXXXX01
spring.datasource.driver-class-name=oracle.jdbc.OracleDriver logging.level.com.ufo.hy.agumaster.dao.StockMapper=debug
logging.config=classpath:logback.xml

这是为了未来迁移到MySQL数据库做准备,届时再增加一个application-mysql.properties,再将application.properties 中spring.profiles.active改为mysql即可。

--2020-04-30--

agumaster 分页方案的更多相关文章

  1. ES 分页方案

    ES 中,存在三种常见的分页方案: FROM, SIZE Search-After Scroll 下面将依次比较三种方案之间的 trede-off,并给出相应建议的应用场景. 常见分页,FROM, S ...

  2. mysql高效分页方案及原理

    很久以前的一次面试中,被面试官问到这个问题,由于平时用到的分页方法不多,只从索引.分表.使用子查询精准定位偏移以外,没有使用到其它方法. 后来在看其它博客看到了一些不同的方案,也一直没有整理.今天有时 ...

  3. Vue Element Tabe Pager 分页方案

    表格和分页分离的,但是使用中,却是结合在一起的. 分析 有以下方式触发查询: mounted 加载数据. 查询按钮 加载数据. pager 变化加载数据 加载数据函数: loadData 问题 mou ...

  4. Mysql 千万级快速查询|分页方案

    1.简单的 直接查主键id SELECT id FROM tblist WHERE LIMIT 500000,10 2对于有where 条件,又想走索引用limit的,必须创建一个索引,将where  ...

  5. SQL分页语句三方案

    方法一: SELECT TOP 页大小 * FROM table1 WHERE id NOT IN ( SELECT TOP 页大小*(页数-1) id FROM table1 ORDER BY id ...

  6. MongoDB 分页查询的方法及性能

    最近有点忙,本来有好多东西可以总结,Redis系列其实还应该有四.五.六...不过<Redis in Action>还没读完,等读完再来总结,不然太水,对不起读者. 自从上次Redis之后 ...

  7. 浅谈SQL Server数据库分页

    数据库分页是老生常谈的问题了.如果使用ORM框架,再使用LINQ的话,一个Skip和Take就可以搞定.但是有时由于限制,需要使用存储过程来实现.在SQLServer中使用存储过程实现分页的已经有很多 ...

  8. oracle,mysql,SqlServer三种数据库的分页查询的实例。

    MySql: MySQL数据库实现分页比较简单,提供了 LIMIT函数.一般只需要直接写到sql语句后面就行了.LIMIT子 句可以用来限制由SELECT语句返回过来的数据数量,它有一个或两个参数,如 ...

  9. SQL分页语句

    有关分页 SQL 的资料很多,有的使用存储过程,有的使用游标.本人不喜欢使用游标,我觉得它耗资.效率低:使用存储过程是个不错的选择,因为存储过程是经过预编译的,执行效率高,也更灵活.先看看单条 SQL ...

随机推荐

  1. linux常用命令(一)软件操作命令

    软件包管理器:yum 安装软件:yum install xxx 卸载软件:yum remove xxx 搜索软件:yum search xxx 清理缓存:yum clean packages 列出已安 ...

  2. java基础之字符串

    以下内容摘自<java编程思想>第十三章. 1. 不可变 String String 对象是不可变对象,String 类中每一个看起来会修改 String 值的方法,实际上都是创建了一个全 ...

  3. java web 下载文件 response.setHeader()的用法 (转载)

    response.setHeader()的用法 response.setHeader()下载中文文件名乱码问题 收藏 1. HTTP消息头 (1)通用信息头 即能用于请求消息中,也能用于响应信息中,但 ...

  4. Vue 页面导出成PDF文件

    注意事项 如果导出的页面中设计到图片或者其他文件跨域文件,需要后端服务配合 安装依赖 npm install html2Canvas --save npm install jspdf--save 封装 ...

  5. CSS动画实例:Loading加载动画效果(三)

    3.小圆型Loading 这类Loading动画的基本思想是:在呈现容器中定义1个或多个子层,再对每个子层进行样式定义,使得其均显示为一个实心圆形,最后编写关键帧动画控制,使得各个实心圆或者大小发生改 ...

  6. 【Apollo】(2)--- Apollo架构设计

    Apollo架构设计 上一篇博客有讲到:[Apollo](1)--- Apollo入门介绍篇 这篇来写Apollo的核心架构设计 一.整体架构 Apollo整体架构图,已由作者宋顺已经给出: 这幅图所 ...

  7. mac启动 Apache JMeter 5.3 语言选择中文界面出现乱码 问题解决

    问题重现 问题修复 出现这个问题,是因为,语言与外观不兼容导致,语言选“中文”,外观选“Metal” 细心的你,可能发现,为啥要重启2次呢???第一次设置完语言后,在设置外观,发现菜单不能选择,第二次 ...

  8. libview关于图片导入并显示

    1 程序框图->图形与声音->图形格式,选择“写入某个格式的图片”,然后在路径处创建输入控件,然后在“图片函数”中选择“绘制平面像素图”,在控件输出端“新图片”创建显示控件.打开前面板,在 ...

  9. 牛客网PAT练兵场-数字黑洞

    题解:循环即可 题目地址:https://www.nowcoder.com/questionTerminal/2e6a898974064e72ba09d05a60349c9e /** * Copyri ...

  10. Docker学习笔记-Dockerfile文件详解

    什么是Dockerfile? Docker中有个非常重要的概念叫做--镜像(Image).Docker 镜像是一个特殊的文件系统,除了提供容器运行时所需的程序.库.资源.配置等文件外,还包含了一些为运 ...