agumaster 分页方案
本文例程下载: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 分页方案的更多相关文章
- ES 分页方案
ES 中,存在三种常见的分页方案: FROM, SIZE Search-After Scroll 下面将依次比较三种方案之间的 trede-off,并给出相应建议的应用场景. 常见分页,FROM, S ...
- mysql高效分页方案及原理
很久以前的一次面试中,被面试官问到这个问题,由于平时用到的分页方法不多,只从索引.分表.使用子查询精准定位偏移以外,没有使用到其它方法. 后来在看其它博客看到了一些不同的方案,也一直没有整理.今天有时 ...
- Vue Element Tabe Pager 分页方案
表格和分页分离的,但是使用中,却是结合在一起的. 分析 有以下方式触发查询: mounted 加载数据. 查询按钮 加载数据. pager 变化加载数据 加载数据函数: loadData 问题 mou ...
- Mysql 千万级快速查询|分页方案
1.简单的 直接查主键id SELECT id FROM tblist WHERE LIMIT 500000,10 2对于有where 条件,又想走索引用limit的,必须创建一个索引,将where ...
- SQL分页语句三方案
方法一: SELECT TOP 页大小 * FROM table1 WHERE id NOT IN ( SELECT TOP 页大小*(页数-1) id FROM table1 ORDER BY id ...
- MongoDB 分页查询的方法及性能
最近有点忙,本来有好多东西可以总结,Redis系列其实还应该有四.五.六...不过<Redis in Action>还没读完,等读完再来总结,不然太水,对不起读者. 自从上次Redis之后 ...
- 浅谈SQL Server数据库分页
数据库分页是老生常谈的问题了.如果使用ORM框架,再使用LINQ的话,一个Skip和Take就可以搞定.但是有时由于限制,需要使用存储过程来实现.在SQLServer中使用存储过程实现分页的已经有很多 ...
- oracle,mysql,SqlServer三种数据库的分页查询的实例。
MySql: MySQL数据库实现分页比较简单,提供了 LIMIT函数.一般只需要直接写到sql语句后面就行了.LIMIT子 句可以用来限制由SELECT语句返回过来的数据数量,它有一个或两个参数,如 ...
- SQL分页语句
有关分页 SQL 的资料很多,有的使用存储过程,有的使用游标.本人不喜欢使用游标,我觉得它耗资.效率低:使用存储过程是个不错的选择,因为存储过程是经过预编译的,执行效率高,也更灵活.先看看单条 SQL ...
随机推荐
- Prometheus监控神器-Rules篇
本章主要对如何使用Prometheus与Alertmanager组件集成配置,以及对警报规则 Rules 的俩种类型及其模板内容进行讲解. 与Alertmanager集成 Prometheus把产生的 ...
- 图计算实现ID_Mapping、Oneid打通数据孤岛
图计算实现ID_Mapping.Oneid打通数据孤岛 ID_Mapping与Oneid的作用 大神告诉我们Oneid能用来做什么 输入数据源格式样例 实现原理 当日代码生成 引用jar包 启动命令 ...
- JavaFX桌面应用-为什么应用老是“未响应”
日常使用软件的过程中,偶尔会遇到软件突然卡住,再点击几次就变成"未响应"的情况. 在JavaFX应用中同样也会出现这种情况,在开发过程中应该尽量避免这种情况的出现. >> ...
- java JDBC工具类
package com.oracle.tools; import java.sql.Connection; import java.sql.DriverManager; import java.sql ...
- C#LeetCode刷题之#258-各位相加(Add Digits)
问题 该文章的最新版本已迁移至个人博客[比特飞],单击链接 https://www.byteflying.com/archives/3860 访问. 给定一个非负整数 num,反复将各个位上的数字相加 ...
- Vue Elementui 表单必填项和非必填项label文字对齐的简单方式
1. 不好的方式 很长时间以来都是用改写form-item样式来使得必填项和非必填项保证label对齐,这样需要改写系统样式,还要在相应的item上引用,代码量增多,示例如下(不推荐) <tem ...
- Es6扩展运算符--三点运算符(...)--展开语法(Spread syntax)
0.看文档呀 关于拓展运算符更详细的解释见 > MDN展开语法 关于剩余参数更详细的解释见 >MDN剩余参数 关于解构赋值更详细的解释见 >MDN解构赋值 直接看上面的文档更好 1. ...
- Android ActivityResumeTrigger: not whiteListed
在点击返回按钮的时候报错: ActivityResumeTrigger: not whiteListed 合作者写的返回操作是: findViewById(R.id.lin_back).setOnTo ...
- python 02 if while
1. if的格式 >>> 1<3 True 真>>> 1>3False 假 if 条件: 条件 + : (t ...
- (转)文件上传org.apache.tomcat.util.http.fileupload.FileUploadException: Stream closed
文件上传时,tomcat报错org.springframework.web.multipart.MultipartException: Failed to parse multipart servle ...