文章主要内容:
进行分页查询时,注意要考虑到前端是用什么分页插件,后端是用什么插件,再把需要数据返回过去。
1. mybatis:
第一种:前端是采用easyui,后端是采用分页插件
第三步:在查询的sql语句执行之前,添加一行代码:
PageHelper.startPage(1, 10);
第一个参数是page,要显示第几页。
第二个参数是rows,没页显示的记录数。
第四步:取查询结果的总数量。
创建一个PageInfo类的对象,从对象中取分页信息。
注意:分页插件对逆向工程生成的代码支持不好,不能对有查询条件的查询分页。会抛异常。
使用我修改过的版本就可以了。
例子:
1))Service层
接收分页参数,一个是page一个是rows。调用dao查询商品列表。并分页。返回商品列表。
返回一个EasyUIDateGrid支持的数据格式。需要创建一个Pojo。此pojo应该放到taotao-common工程中。
public class EUDataGridResult {
private long total;
private List> rows;
public long getTotal() {
return total;
}
public void setTotal(long total) {
this.total = total;
}
public List> getRows() {
return rows;
}
public void setRows(List> rows) {
this.rows = rows;
}
}
2))代码实现:
/**
* 商品列表查询
* Title: getItemList
* Description:
* @param page
* @param rows
* @return
* @see com.taotao.service.ItemService#getItemList(long, long)
*/
@Override
public EUDataGridResult getItemList(int page, int rows) {
//查询商品列表
TbItemExample example = new TbItemExample();
//分页处理
PageHelper.startPage(page, rows);
List list = itemMapper.selectByExample(example);
//创建一个返回值对象
EUDataGridResult result = new EUDataGridResult();
result.setRows(list);
//取记录总条数
PageInfo pageInfo = new PageInfo<>(list);
result.setTotal(pageInfo.getTotal());
return result;
}
3))Controller:
接收页面传递过来的参数page、rows。返回json格式的数据。EUDataGridResult
需要使用到@ResponseBody注解。
@RequestMapping("/item/list")
@ResponseBody
public EUDataGridResult getItemList(Integer page, Integer rows) {
EUDataGridResult result = itemService.getItemList(page, rows);
return result;
}
第二种:前端是采用分页插件,后端mybatis是采用分页插件
使用步骤:
后端:第一步:与第一种方法一样。
前端:用的是分页插件
第二步:在brand.html引入分页组件
第三步:构建app模块时引入pagination模块
var app=angular.module('pinyougou',['pagination']);//定义品优购模块
第四步:页面的表格下放置分页组件
第五步:JS代码
//重新加载列表 数据
$scope.reloadList=function(){
//切换页码
$scope.findPage( $scope.paginationConf.currentPage, $scope.paginationConf.itemsPerPage);
}
//分页控件配置
$scope.paginationConf = {
currentPage: 1,
totalItems: 10,
itemsPerPage: 10,
perPageOptions: [10, 20, 30, 40, 50],
onChange: function(){
$scope.reloadList();//重新加载
}
};
//分页
$scope.findPage=function(page,rows){
$http.get('../brand/findPage.do?page='+page+'&rows='+rows).success(
function(response){
$scope.list=response.rows;
$scope.paginationConf.totalItems=response.total;//更新总记录数
}
);
}
注意:
在页面的body元素上去掉ng-init指令的调用
paginationConf 变量各属性的意义:
currentPage:当前页码
totalItems:总条数
itemsPerPage:
perPageOptions:页码选项
onChange:更改页面时触发事件
2. hibernate:
这里就介绍后端的插件,不介绍前端的,因为和mybatis前端一样。
请求的参数:http://localhost:8080/item/list?page=1&rows=30 分页信息。(需要看官方的手册)
返回值。Json数据。数据格式:
Easyui中datagrid控件要求的数据格式为:{total:”2”,rows:[{“id”:”1”,”name”,”张三”},{“id”:”2”,”name”,”李四”}]}
Total:总记录数
个人认为:只要点击这个页面,就会自动去请求/iterm/list获取数据来加载到这个页面
注意:datagride中field属性名字要与rows里面一样