分页查询
使用PageHelper插件实现。其实可以升级为MybatisPlus的。
接口设计
设计DTO类
com.sky.dto.EmployeePageQueryDTO
已设计好,为EmployeePageQueryDTO;
封装PageResult
com.sky.result.PageResult
com.sky.result.Result
已封装好,为PageResult。Page的方法也有相应实现。
Controller层
com.sky.controller.admin.EmployeeController
注意是GetMapping,且return为Result.success(pageResult);
/*** 员工分页查询* @param employeePageQueryDTO* @return*/@GetMapping("/page")@ApiOperation("员工分页查询")public Result<PageResult> page(EmployeePageQueryDTO employeePageQueryDTO){log.info("员工分页查询,参数为:{}", employeePageQueryDTO);PageResult pageResult = employeeService.pageQuery(employeePageQueryDTO);//后续定义return Result.success(pageResult);}
Service层接口
com.sky.service.EmployeeService
/*** 分页查询* @param employeePageQueryDTO* @return*/PageResult pageQuery(EmployeePageQueryDTO employeePageQueryDTO);
Service层实现类
com.sky.service.impl.EmployeeServiceImpl
这里PageHelper接收一页多少条数据和当前是第几页。那么mapper方法是如何拿到这两个数据的呢?
实际上PageHelper和Page共享一个线程,数据通过ThreadLocal共享。
/*** 分页查询** @param employeePageQueryDTO* @return*/public PageResult pageQuery(EmployeePageQueryDTO employeePageQueryDTO) {// select * from employee limit 0,10//开始分页查询PageHelper.startPage(employeePageQueryDTO.getPage(), employeePageQueryDTO.getPageSize());Page<Employee> page = employeeMapper.pageQuery(employeePageQueryDTO);//后续定义long total = page.getTotal();List<Employee> records = page.getResult();return new PageResult(total, records);}
mapper
com.sky.mapper.EmployeeMapper
/*** 分页查询* @param employeePageQueryDTO* @return*/Page<Employee> pageQuery(EmployeePageQueryDTO employeePageQueryDTO);
mapper.xml
sky-server/src/main/resources/mapper/EmployeeMapper.xml
注意这里的resultType是com.sky.entity.Employee。是因为mapper方法中的Page实际返回的是Employee。
且用户名用了模糊查询/
<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>order by create_time desc</select>
日期格式转换
法一:在实体类属性上加注解
// @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")private LocalDateTime createTime;// @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")private LocalDateTime updateTime;
不是很推荐该方法是因为,每用到一个实体类,就需要在其属性上加注解。实体类的属性一朵。
法二:扩展SpringMVC的消息转换器
首先在公共类中定义日期格式
com.sky.json.JacksonObjectMapper
package com.sky.json;public class JacksonObjectMapper extends ObjectMapper {//.......public static final String DEFAULT_DATE_TIME_FORMAT = "yyyy-MM-dd HH:mm";//.......}
}
然后在WebMvcConfiguration中扩展Spring MVC框架的消息转化器
com.sky.config.WebMvcConfiguration
/*** 扩展Spring MVC框架的消息转化器* @param converters*/protected void extendMessageConverters(List<HttpMessageConverter<?>> converters) {log.info("扩展消息转换器...");//创建一个消息转换器对象MappingJackson2HttpMessageConverter converter = new MappingJackson2HttpMessageConverter();//需要为消息转换器设置一个对象转换器,对象转换器可以将Java对象序列化为json数据converter.setObjectMapper(new JacksonObjectMapper());//将自己的消息转化器加入容器中converters.add(0,converter);}