员工分页查询功能实现
需求分析和设计
代码开发
先设计类
将对应分页查询的传参类以及结果类进行封装
对应真正返回的为Result<PageResult>
Controller
/**
*
* @param employeePageQueryDTO
* @return
*/
@GetMapping("/page")
@ApiOperation("员工分页查询")
public Result<PageResult> page(@RequestBody EmployeePageQueryDTO employeePageQueryDTO){
log.info("员工分页查询,参数为{}",employeePageQueryDTO);
PageResult pageResult=employeeService.pageQuery(employeePageQueryDTO);
return Result.success(pageResult);
}
serviceimpl
@Override
public PageResult pageQuery(EmployeePageQueryDTO employeePageQueryDTO) {
//select * from employee limit 0,10(开始记录数,一共几条) 页码和一页记录数
//对应关系limit (页码-1)*每页记录数,一页记录数,通过pageHelper
//自己学一下PageHelper插件
PageHelper.startPage(employeePageQueryDTO.getPage(),employeePageQueryDTO.getPageSize());
Page<Employee> page = employeeMapper.pageQuery(employeePageQueryDTO);
long total = page.getTotal();
List<Employee> result = page.getResult();
return new PageResult(total,result);
}
Mapper
Page<Employee> pageQuery(EmployeePageQueryDTO employeePageQueryDTO);
对应的xml文件
<select id="pageQuery" resultType="com.sky.entity.Employee">-- 返回结果实际为集合中的单个元素,可以点击错误自动生成这个标签
select * from employee
<where>
<if test="name != null and name !=''">
and name LIKE concat('%',#{name},'%')
</if>
</where>
oreder by create_time desc;
</select>
pageHelper底层
为什么我们并没有查询对应的
sql还能呈现出分页效果呢?
pagehelper底层也是根据ThreadLocal来实现分页查询
然后在查询的时候取出来进行动态的拼接
顺手还能把计算做了
代码完善
测试完后发现返回的修改时间数据以数据的形式返回
渲染后不是我们想要的结果 应为,xxxx年xx月x日 xx时 xx分 xx秒
完善
方式1是针对单个
方式2是统一处理
先只修改createtime,重新启动测试
createtime变了,但updatetime还是数组形式
第二种方式
/**
* 扩展springmvc框架的消息转换器
* @param converters
*/
@Override
protected void extendMessageConverters(List<HttpMessageConverter<?>> converters) {
//扩展消息转换器
//自己创建一个消息转换器对象
MappingJackson2HttpMessageConverter mappingJackson2HttpMessageConverter = new MappingJackson2HttpMessageConverter();
//为消息转化器设置一个对象转换器,可以将java对象序列化为json数据
mappingJackson2HttpMessageConverter.setObjectMapper(new JacksonObjectMapper());
//将自己的消息转换器加入容器中
converters.add(0,mappingJackson2HttpMessageConverter);
}
}
对象转换器,需要我们自己进行设置
converters.add(0,mappingJackson2HttpMessageConverter);
默认添加消息转换器会放到最后一位,我们设置索引0,优先级会变为最高