大型运输行业实战_day04_3_高级查询+分页
1.高级查询+分页最终结果

2.分页的本质分析
前端传入:当前页 和 每页显示条数
数据库必须查询出:数据列表 和 总共条数
页面显示包括的数据有: 列表 + 每页显示条数 + 当前页 + 总共页数 + 总共条数,站在面向对象的思考角度应该将其封装到一个对象中 即:分页对象 resultPage.java
其中总共页数通过计算而来, 总共页数=()(总共条数-1)/每页显示条数)+1
在查询列表的时候需要使用 limit 开始下标,每页显示条数, 开始下标由前端决定, 开始下标=(当前页-1)*每页显示条数
3.在高级查询的基础上实现分页步骤
3.1页面显示完成html代码
<button onclick="firstPage()">首页</button>
<button onclick="upPage()">上页</button>
<button onclick="nextPage()">下页</button>
<button onclick="lastPage()">末页</button>
跳转到<input id="currentPage1" value="" size="1"/>页 <button onclick="jumpPage()">跳转</button>,
每页显示<span id="pageSize">10</span>条,
当前<span id="currentPage">5</span>/<span id="totalPage">10</span>页,
总共<span id="count">48</span>条
3.2. js函数方法
/**
* 注意在调用该函数时必须输入参数
* 查询+ 分页
* */
function query(_pageSize,_currentPage){
// alert("------query------");
//1.获取参数
var startStation = $("#startStation").val();
var stopStation = $("#stopStation").val();
//2.发送请求
var params = {
startStation:startStation,
stopStation:stopStation,
_pageSize:_pageSize,//分页需要的数据
_currentPage:_currentPage//分页需要的数据
};
var url = 'http://localhost:8080/ticket2/data3';
jQuery.ajax({
type: 'POST',
contentType: 'application/x-www-form-urlencoded',
url: url,
data: params,
dataType: 'json',
success: function (data) {
//取出列表
var ticketList = data.list;
//取出分页数据
var currentPage= data.currentPage;
var count= data.count;
var pageSize= data.pageSize;
var totalPage= data.totalPage;
var html='<tr>'+
'<td>编号</td>'+
'<td>开始车站</td>'+
'<td>到达车站</td>'+
'</tr>';
//解析数据到table表中
for (var i=0;i<ticketList.length;i++){
//取出一个对象 java里面的内省机制
var ticket = ticketList[i];
var id = ticket.id;
var startStation= ticket.startStation;
var stopStation= ticket.stopStation;
html+='<tr>'+
'<td>'+id+'</td>'+
'<td>'+startStation+'</td>'+
'<td>'+stopStation+'</td>'+
'</tr>';
}
//3.填充数据
//填充列表
$("#ticketList").html(html);
//填充分页数据
$("#totalPage").html(totalPage);
$("#pageSize").html(pageSize);
$("#count").html(count);
$("#currentPage").html(currentPage);
},
error: function (data) {
alert("失败啦");
}
});
}
3.3.控制层方法
/**
* 获取车票数据 高级查询 + 分页
*/
@RequestMapping("/data3")
@ResponseBody //请求数据必须写这个
public ResultPage getData3(TicketQueryObj ticketQueryObj, String _pageSize, String _currentPage){
//接收参数 可以将分页数据直接用TicketQueryObj对象就收,这里单独写出来是为了更好的理解 分页前端需要传的两个重要参数
if (_pageSize!=null && !_pageSize.equals("")){
ticketQueryObj.setPageSize(Integer.valueOf(_pageSize));
}
if (_currentPage!=null && !_currentPage.equals("")){
ticketQueryObj.setCurrentPage(Integer.valueOf(_currentPage));
}
//调用方法
ResultPage page = ticketService.getPage(ticketQueryObj);
//控制跳转
return page;
}
3.4.业务成方法
@Override
public ResultPage getPage(TicketQueryObj ticketQueryObj) {
ResultPage resultPage =new ResultPage();
//获取数据列表
List<Ticket> tickets = ticketDao.queryList(ticketQueryObj);
resultPage.setList(tickets);
//总共条数查询数据库
Integer count = ticketDao.count(ticketQueryObj);
resultPage.setCount(count);
//当前页
Integer currentPage = ticketQueryObj.getCurrentPage();
resultPage.setCurrentPage(currentPage);
//每页显示条数
Integer pageSize = ticketQueryObj.getPageSize();
resultPage.setPageSize(pageSize);
//总共页数
Integer totalPage=((count-1)/pageSize)+1;
resultPage.setTotalPage(totalPage);
return resultPage;
}
3.5持久层接口
/**
* 根据条件 查询+分页
* @param ticketQueryObj
* @return
*/
List<Ticket> queryList(TicketQueryObj ticketQueryObj); /**
* 计算总条数
* @param ticketQueryObj
* @return
*/
Integer count(TicketQueryObj ticketQueryObj);
3.6.sql映射文件
<!--
查询列表
SELECT * FROM ticket WHERE start_station='成都'
LIMIT 0,5-->
<select id="queryList" parameterType="com.day02.sation.query.TicketQueryObj" resultType="com.day02.sation.model.Ticket">
SELECT id,start_station startStation,stop_station stopStation FROM ticket
<where>
<if test="startStation!=null and startStation!='' ">
AND start_station = #{startStation}
</if>
<if test="stopStation!=null and stopStation!='' ">
AND stop_station=#{stopStation}
</if>
</where>
limit #{startIndex},#{pageSize}
</select> <!--
查询总共条数
-->
<select id="count" parameterType="com.day02.sation.query.TicketQueryObj" resultType="int">
SELECT COUNT(1) FROM ticket
<where>
<if test="startStation!=null and startStation!='' ">
AND start_station = #{startStation}
</if>
<if test="stopStation!=null and stopStation!='' ">
AND stop_station=#{stopStation}
</if>
</where>
</select>
3.7. 测试dao
/**
* 测试获取列表
*/
@Test
public void testGetList2(){
TicketQueryObj ticketQueryObj = new TicketQueryObj();
ticketQueryObj.setStartStation("成都 ");
ticketQueryObj.setStopStation("南充");
List<Ticket> list = ticketDao.queryList(ticketQueryObj);
System.out.println("list="+list);
} /**
* 测试 获取总条数
*/
@Test
public void testCount(){
TicketQueryObj ticketQueryObj = new TicketQueryObj();
ticketQueryObj.setStartStation("成都");
ticketQueryObj.setStopStation("南充");
Integer count = ticketDao.count(ticketQueryObj);
System.out.println("count="+count);
}
重启服务器分页列表和数据完成!
3.8.完成 首页 上页 下页 末页 跳转到 按钮的js函数
//首页
function firstPage(){
alert("--firstPage--");
//获取每页显示条数
var _pageSize = $("#pageSize").html();
query(_pageSize,1);
}
//上页
function upPage(){
alert("--upPage--");
var _pageSize = $("#pageSize").html();
//当前页
var currentPage=$("#currentPage").html();
var _currentPage=currentPage-1;
query(_pageSize,_currentPage);
}
//下页
function nextPage(){
alert("--nextPage--");
var _pageSize = $("#pageSize").html();
//当前页
var currentPage=$("#currentPage").html();
//var _currentPage=currentPage+1;//不能这样直接加必须使用函数
var _currentPage= parseInt(currentPage)+1;
query(_pageSize,_currentPage);
}
//末页
function lastPage(){
alert("--lastPage--");
var _pageSize = $("#pageSize").html();
//当前页
var _currentPage=$("#totalPage").html();
query(_pageSize,_currentPage);
}
//跳转到
function jumpPage(){
alert("--jumpPage--");
var _pageSize = $("#pageSize").html();
//当前页
var _currentPage=$("#currentPage1").val();
query(_pageSize,_currentPage);
}
4.用到的分页对象和查询对象
4.1.分页对象 ResultPage.java
package com.day02.sation.page; import com.day02.sation.model.Ticket; import java.util.List; /**
* Created by Administrator on 12/28.
*/
public class ResultPage {
// 列表数据:数据库查询来的
private List<Ticket> list;
//当前页
private Integer currentPage;
// 总条数 数据库查询出来的
private Integer count;
// 总共页数=总条数/每页显示条数 (判断是否有余数)
private Integer totalPage;
// 每 页显示条数:用户设定或者默认
private Integer pageSize; public List<Ticket> getList() {
return list;
} public void setList(List<Ticket> list) {
this.list = list;
} public Integer getCurrentPage() {
return currentPage;
} public void setCurrentPage(Integer currentPage) {
this.currentPage = currentPage;
} public Integer getCount() {
return count;
} public void setCount(Integer count) {
this.count = count;
} public Integer getTotalPage() {
return totalPage;
} public void setTotalPage(Integer totalPage) {
this.totalPage = totalPage;
} public Integer getPageSize() {
return pageSize;
} public void setPageSize(Integer pageSize) {
this.pageSize = pageSize;
}
}
ResultPage.java
4.2.查询对象
package com.day02.sation.query; /**
* Created by Administrator on 12/28.
*/
public class TicketQueryObj {
//当前页
private Integer currentPage=1;
//每页显示条数
private Integer pageSize=3;
//开始下标
private Integer startIndex=0;
//业务查询字段
private String startStation;
private String stopStation;
public Integer getStartIndex() {
//开始下标 使用户传来的,但是他是间接传来的 传的是当前页 和 每页显示条数,应该计算得出开始下标
if (currentPage==null || pageSize==null){
return 0;
}
this.startIndex = ( this.currentPage-1)* this.pageSize;
return startIndex;
} public void setStartIndex(Integer startIndex) {
this.startIndex = startIndex;
} public Integer getPageSize() {
if (pageSize==null || pageSize==0){
return 3;
}
return pageSize;
} public void setPageSize(Integer pageSize) {
this.pageSize = pageSize;
} public Integer getCurrentPage() {
if (currentPage==null || currentPage==0){
return 1;
}
return currentPage;
} public void setCurrentPage(Integer currentPage) {
this.currentPage = currentPage;
} public String getStartStation() { return startStation;
} public void setStartStation(String startStation) {
this.startStation = startStation;
} public String getStopStation() {
return stopStation;
} public void setStopStation(String stopStation) {
this.stopStation = stopStation;
}
}
TicketQueryObj.java
到此分页+高级查询完成!
大型运输行业实战_day04_3_高级查询+分页的更多相关文章
- 大型运输行业实战_day04_2_高级查询
1.高级查询最总效果 2.高级查询步骤 2.1页面输入框显示 开始车站:<input id="startStation" type="text" valu ...
- 大型运输行业实战_day11_2_事务理论与实际生产配置事务管理
1.什么是事务(Transaction:tx) 数据库的某些需要分步完成,看做是一个整体(独立的工作单元),不能分割,要么整体成功,要么整体生效.“一荣俱荣,一损俱损”,最能体现事务的思想.案例:银行 ...
- 大型运输行业实战_day09_2_站间互售实现
1.添加站间互售入口 对应的html代码 <button onclick="otherStation()">站间互售</button> 对应的js发送函数 ...
- 大型运输行业实战_day09_1_日期转换与My97DatePicker插件使用
1.日期转换 1.1字符串类型转换成时间Date类型 /** * 给定字符串 转变 为 Date 类型 * @param date 时间 * @param format 时间格式 如:yyyy-MM- ...
- 大型运输行业实战_day07_1_订单查看实现
1.业务分析 每个在窗口售票的售票员都应该可以随时查看自己的售票信息 简单的界面入口如图所示: 对应的html代码: <button onclick="orderDetail()&qu ...
- 大型运输行业实战_day06_1_购票功能简单实现
1.添加购票按钮 对应的html代码 因为列表是js函数动态填充的,故添加按钮应该在js函数中,完整代码如下: /** * 注意在调用该函数时必须输入参数 * 查询+ 分页 * */ function ...
- 大型运输行业实战_day15_1_全文检索之Lucene
1.引入 全文检索简介: 非结构化数据又一种叫法叫全文数据.从全文数据(文本)中进行检索就叫全文检索. 2.数据库搜索的弊端 案例 : select * from product whe ...
- 大型运输行业实战_day14_1_webserivce简单入门
1.简单使用 1.1.服务端 1.编写接口 package com.day02.sation.ws; /** * Created by Administrator on 1/12. */ public ...
- 大型运输行业实战_day12_1_权限管理实现
1.业务分析 权限说的是不同的用户对同一个系统有不同访问权限,其设计的本质是:给先给用户分配好URL,然后在访问的时候判断该用户是否有当前访问的URL. 2.实现 2.1数据库设计标准5表权限结构 2 ...
随机推荐
- C#下编程完成IIS网络App的权限设置
转自:http://linwx1978.blog.163.com/blog/static/1504106920101104834271/ 以前的日志中转了不少文章,最近听说转文不是好习惯,决定普世一把 ...
- [UE4]C++三种继承方式
(1) 公有继承(public) 公有继承的特点是基类的公有成员和保护成员作为派生类的成员时,它们都保持原有的状态,而基类的私有成员仍然是私有的,不能被这个派生类的子类所访问. (2)私有继承(pri ...
- 关于cookie的一些事
关于cookie的一些事转自:http://blog.csdn.net/yunnysunny/article/details/7748106 cookie是实现web中用户状态维护的基础.我们常见的s ...
- javascript的防篡改对象之preventExtensions()方法
js在默认情况下,所有的对象都是可扩展的.这也是让很多开发人员头特疼的问题.因为在同一环境中,一不小心就会发生修改了不必要的对象,而自己却不知道. 在ECMAScript5可以解决这种问题了. pre ...
- 朴素贝叶斯-对数似然Python实现-Numpy
<Machine Learning in Action> 为防止连续乘法时每个乘数过小,而导致的下溢出(太多很小的数相乘结果为0,或者不能正确分类) 训练: def trainNB0(tr ...
- Apache Doris通过supervisor进行进程管理
下面一段文字是摘自doris官方文档:注:在生产环境中,所有实例都应使用守护进程启动,以保证进程退出后,会被自动拉起,如 Supervisor.如需使用守护进程启动,需要修改各个 start_xx.s ...
- 基本数据结构:链表(list)
copy from:http://www.cppblog.com/cxiaojia/archive/2012/07/31/185760.html 基本数据结构:链表(list) 谈到链表之前,先说一下 ...
- 关于raid5的一系列问题
前几天我的一个同事在对计划采购的存储进行测试,期间聊到了raid5的话题,我和他的意见产生了分歧.他的说法是raid5不能挂太多盘是因为如果挂太多盘写惩罚会非常严重导致性能下降.而我的观点则是对于ra ...
- linux 基本。。
一. 将磁盘分区挂载为只读 这一步很重要,并且在误删除文件后应尽快将磁盘挂载为只读.越早进行,恢复的成功机率就越大. 1. 查看被删除文件位于哪个分区 [root@localhost ~]# mo ...
- mybatis - maven - eclipse 坑爹问题: No suitable driver found for http://maven.apache.org
坑爹的问题,调查了1天 一直以为是驱动问题,根源却在url上:No suitable driver found for http://maven.apache.org 根源: 1.在jdbc.prop ...