分页查询
文章目录
- 分页查询
- 环境搭建
- 添加依赖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>
然后再逆向看一面数据就返回回去了。