分页查询

文章目录

  • 分页查询
  • 环境搭建
  • 添加依赖pom.xml
  • 添加application.yml
  • 前端数据的解析
  • layui:表格的js使用 js发送样式
  • controller层接受数据
  • service层数据封装
  • dao进行数据库的查询操作



封装SQL语句的方法,只需要写全查的方法,后期框架会自动拼接分写的数据实现数据库数据的分页,每一次的页面跳转都需要连接数据库进行一次查询。

数据并不不是只有分页的数据。还需要封装放在定义的json格式中,例如使用layui的分页,就需要配置数据之外的数据https://www.layui.com/demo/table/user/?page=1&limit=30

他的数据解析还需要封装:

{
code: 0,
msg: "",
count: 1000,
date: [{},{}]
}

前端传过来数据也需要解析:第几页page,一页的数据limit,然后进行数据库查询

所以进行分页查询的数据必须有这两个属性:

public class BaseQuery {
    //默认值
    private Integer page=1;
    private Integer limit=10;
}

分页步骤的实现:

  • 环境的搭建
  • 前端数据的解析 接收
  • 后端数据查询 进行数据封装再返回

环境搭建

添加依赖pom.xml
<!-- 分页插件 -->
<dependency>
  <groupId>com.github.pagehelper</groupId>
  <artifactId>pagehelper-spring-boot-starter</artifactId>
  <version>1.2.13</version>
</dependency>
添加application.yml
## pageHelper 分页
pagehelper:
  helper-dialect: mysql

前端数据的解析

前端数据的方式格式:前端懵逼

layui:表格的js使用 js发送样式

后期出一篇文章介绍

https://www.layui.com/doc/modules/table.html#autoRender

var  tableIns = table.render({
    elem: '#saleChanceList', // 表格绑定的ID
    url : ctx + '/chance/list', // 访问数据的地址
    cellMinWidth : 95,
    page : true, // 开启分页
    height : "full-125",
    limits : [10,15,20,25], //分页的选择数组
    limit : 10,	//默认分页数
    toolbar: "#toolbarDemo",  //设置头部工具栏
    id : "saleChanceListTable", //给当前渲染的方式一个id
    cols : [[  //设置表头信息
        {type: "checkbox", fixed:"center"},
        {field: "id", title:'编号',fixed:"true"},
        {field: 'chanceSource', title: '机会来源',align:"center"},
        {field: 'customerName', title: '客户名称',  align:'center'},
        {field: 'cgjl', title: '成功几率', align:'center'},
        {field: 'overview', title: '概要', align:'center'},
        {field: 'linkMan', title: '联系人',  align:'center'},
        {field: 'linkPhone', title: '联系电话', align:'center'},
        {field: 'description', title: '描述', align:'center'},
        {field: 'createMan', title: '创建人', align:'center'},
        {field: 'createDate', title: '创建时间', align:'center'},
        {field: 'uname', title: '指派人', align:'center'},
        {field: 'assignTime', title: '分配时间', align:'center'},
        {field: 'state', title: '分配状态', align:'center',templet:function(d){
                return formatterState(d.state);
            }},
        {field: 'devResult', title: '开发状态', align:'center',templet:function (d) {
                return formatterDevResult(d.devResult);
            }},
        {title: '操作', templet:'#saleChanceListBar',fixed:"right",align:"center", minWidth:150}
    ]]
});
controller层接受数据

最好封装一个类用来获取前端,用来获取前端传过来的数据

@ResponseBody
@RequestMapping("list")
public Map<String,Object> saleChanceQueryList(SaleChanceQuery saleChanceQuery){
    return saleChanceService.querySaleChanceByParams(saleChanceQuery);
}

页面分页:添加筛选的数据

@Data
public class SaleChanceQuery extends BaseQuery {
    private String customerName; // 客户名称
    private String createMan; // 创建人
    private String state; // 分配状态

}

基本的分页查询数据:

@Data
public class BaseQuery {
    //默认值
    private Integer page=1;
    private Integer limit=10;
}
service层数据封装

接收到数据后进入service层进行查询,封装map<>数据给控制层,需要带有之前的数据json数据封装格式。

需要封装出这样的json格式发送给前端

{
code: 0,
msg: "",
count: 1000,
date: [{},{}]
}
//分页查询
public Map<String, Object> querySaleChanceByParams(SaleChanceQuery saleChanceQuery) {
    HashMap<String, Object> map = new HashMap<>();
    //开启分页 	Mybatis - 通用分页拦截器类似拦截器的实现方法
    PageHelper.startPage(saleChanceQuery.getPage(), saleChanceQuery.getLimit());
    //调用dao层查询  查询的数据已经分好页,返回的数据
    List<SaleChance> saleChances = saleChanceDao.selectByParams(saleChanceQuery);
    //将数据封装到pageInfo中
    PageInfo<SaleChance> saleChancePageInfo = new PageInfo<>(saleChances);
    map.put("code", 0);
    map.put("msg", "success");
    map.put("count", saleChancePageInfo.getTotal());
    map.put("data", saleChances);
    return map;
}
dao进行数据库的查询操作

直接对应的mapper where标签中添加了筛选条件

<select id="selectByParams" parameterType="com.ppl.crm.base.dao.BaseQuery" resultType="com.ppl.crm.entity.vo.SaleChance">
    select
    *
    from
    t_sale_chance
    <where>
        is_valid = 1
        <if test=" null != customerName and  '' != customerName">
            and customer_name like concat('%',#{customerName},'%')
        </if>
        <if test=" null != createMan and  '' != createMan">
            and create_man = #{createMan}
        </if>
        <if test=" null != state and  '' != state">
            and state = #{state}
        </if>
    </where>
</select>

然后再逆向看一面数据就返回回去了。