分页查询是Web项目中非常重要的一项,Mybatis对于条件分页查询有其天然优势,动态sql的灵活运用使得sql语句变得简洁,在本文中,使用Pagehelper分页插件并结合Mybatis逆向出的实体进行条件查询。
首先,导入Pagehelper依赖
<dependency>
<groupId>com.github.pagehelpergroupId>
<artifactId>pagehelperartifactId>
<version>5.0.0version>
dependency>
在前台进行查询的时候,会有许多的条件传过来,先看个例子:此为controller代码
/**
* 所有用户列表
*/
@ResponseBody
@RequestMapping("/list")
public Result userlist(Result result, SysUser example)
{ PageHelper.startPage(result.getPage(), result.getLimit());//传入起始页与页数大小
result.setExample(example);//设置条件
Result all = sysUserService.getAll(result);//带条件查询
PageInfo page = new PageInfo(all.getData());//将用户数据封装到PageInfo 中
result.setCode("0");//设置成功代码
result.setCount(page.getPageSize());//设置数据数量
return result;
}
Result为封装所有返回数据的实体,包含layui框架所需要的字段,代码如下:
public class Result<T> implements Serializable {
int page;//起始页
int limit;//页数大小
int count;//数据数量
String code;//代码
String msg;//信息
List data;//返回数据
T example;//任何类型条件
}
接下来是sysUserService中的代码:
public Result getAll(Result result) {
SysUserExample example = new SysUserExample();//逆向实体类
SysUserExample.Criteria criteria = example.createCriteria();
SysUser ex = result.getExample();
setCriteria(criteria,ex);//判断是否有该条件,并进行条件查询
List sysUsers = sysUserDao.selectByExample(example);//根据条件查询,该方法为Mybatis逆向出的
result.setData(sysUsers);//设置数据
return result;
}
private void setCriteria(SysUserExample.Criteria criteria, SysUser example) {
if (!StringUtils.isEmpty(example.getUserId().toString()))
criteria.andUserIdEqualTo(example.getUserId());
if (!StringUtils.isEmpty(example.getUsername().toString()))
criteria.andUsernameEqualTo(example.getUsername());
}
以上两段代码将前端传来的信息进行查询,接下来就是前端页面的发送与展示:
<html>
<head>
<title>管理员列表title>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta content="width=device-width, initial-scale=1, maximum-scale=1, user-scalable=no" name="viewport">
<link rel="stylesheet" href="/statics/plugins/layui/css/layui.css" media="all"/>
<link rel="stylesheet" href="/statics/plugins/font-awesome/css/font-awesome.min.css" media="all"/>
<link rel="stylesheet" href="/statics/src/css/app.css" media="all"/>
<link rel="stylesheet" href="/statics/src/css/themes/default.css" media="all" id="skin" kit-skin/>
<script src="/statics/plugins/layui/layui.js">script>
head>
<body>
<div id="rrapp" v-cloak>
<div v-show="showList">
<table id="jqGrid">table>
<div id="jqGridPager">div>
div>
div>
<script>
layui.use('table', function () {
var $ = layui.$;
var table = layui.table, form = layui.form;
table.render({
elem: '#jqGrid',
url: '/sys/user/list',
cellMinWidth: 80,
cols: [
[{
checkbox: true,
fixed: true
}, {
field: 'userId',
title: '员工编号',
}, {
field: 'username',
title: '用户名',
}, {
field: 'email',
title: '邮箱',
}, {
field: 'mobile',
title: '手机号',
}, {
field: 'createTime',
title: '创建时间',
}]
],
id: 'reloadId',
page: true
});
var active = {
reload: function () {
var s_name = $('#s_name');
table.reload('reloadId', {
page: {
curr: 1 //重新从第 1 页开始
},
where: {
username: s_name.val(),
}
});
},
getCheckData: function () { //获取选中数据
var checkStatus = table.checkStatus('reloadId');
var data = checkStatus.data;
$.post({
dataType: 'json',
contentType: 'application/json',
url: "/staff/deletes",
data: JSON.stringify(data),
success: function (result) {
if (result.code == 0) {
layer.msg('已删除!', {icon: 1, time: 1000});
table.reload('reloadId');
} else {
layer.msg(result.result, {icon: 6, time: 1000});
}
},
error: function () {
layer.msg('网络繁忙!', {icon: 6, time: 1000});
}
});
}
};
});
);
}
script>
body>
html>
该代码中url为向控制器发送请求的路径,active中的s_name为向后端发送的条件,条件可以为多个,在本例中,没有设置条件,因此,控制器接收到的条件example属性均为null。layui向控制器发送请求默认起始页为1,页数大小为10,控制器返回json数据并交给layui显示。