Advertisement

Layui+Springboot+Mybatis+Pagehelper实现条件分页查询

阅读量:

分页查询作为Web开发中不可或缺的一项技术,在实际应用中发挥着重要作用。Mybatis在处理条件性分页查询时展现出天然的优势。灵活运用动态SQL的方式显著提升了SQL语句的简洁性,在本文的研究中采用的是Pagehelper分页插件,并结合逆向生成Mybatis实体的方法来实现条件性查询。

首先,导入Pagehelper依赖

复制代码
       <dependency>
            <groupId>com.github.pagehelper</groupId>
            <artifactId>pagehelper</artifactId>
            <version>5.0.0</version>
        </dependency>

在执行前端查询操作时,通常会传递多个条件信息.查看一个案例:其中包含一个Controller代码段.

复制代码
    /** * 所有用户列表
     */
    @ResponseBody
    @RequestMapping("/list")
    public Result<SysUser> userlist(Result<SysUser> result, SysUser example)
    {   PageHelper.startPage(result.getPage(), result.getLimit());//传入起始页与页数大小
        result.setExample(example);//设置条件
        Result<SysUser> all = sysUserService.getAll(result);//带条件查询
        PageInfo page = new PageInfo(all.getData());//将用户数据封装到PageInfo 中
        result.setCode("0");//设置成功代码
        result.setCount(page.getPageSize());//设置数据数量
        return result;
    }

Result代表封装所有返回数据的实体,并且包含liyi框架所需的字段。代码如下:

复制代码
    public class Result<T> implements Serializable {
    int page;//起始页
    int limit;//页数大小
    int count;//数据数量
    String code;//代码
    String msg;//信息
    List<T> data;//返回数据
    T example;//任何类型条件
    }

接下来是sysUserService中的代码:

复制代码
    public Result<SysUser> getAll(Result<SysUser> result) {
        SysUserExample example = new SysUserExample();//逆向实体类
        SysUserExample.Criteria criteria =  example.createCriteria();
        SysUser ex = result.getExample();
        setCriteria(criteria,ex);//判断是否有该条件,并进行条件查询
        List<SysUser> 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());
    }

上述两个代码段负责接收前端传递的信息并对之进行检索;随后的工作流程即为前端页面的数据发送及相应的展示。

复制代码
    <!DOCTYPE html>
    <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 作为路径发送请求指向 controller;active 中的 s_name 作为 向 后 端 发送 的 条件;这些 条件 可接受多个;在此示例中 没有 设置 条件 因此 controller 接收到 的 condition 的 example 属性 均 为空;layo 发送 请求时 默认 起始页 设置 为 1 每页 包含 10 条记录;操作完成后 controller 返回 json 格式 数据 并将 数据 转移 给 layo 进行 显示。

全部评论 (0)

还没有任何评论哟~