本文详细讲述了一个分页查询的实现:
mybatis配置类:
import com.baomidou.mybatisplus.extension.plugins.PaginationInterceptor;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
/**
* @Description: mybatis配置
* @Date: 2023-02-28
*/
@Configuration
public class MybatisConfig {
/**
* Mybatis分页插件
*
* @return 分页插件
*/
@Bean
public PaginationInterceptor paginationInterceptor() {
PaginationInterceptor paginationInterceptor = new PaginationInterceptor();
// 分页大小为-1时,查询所有数据
paginationInterceptor.setLimit(-1);
return paginationInterceptor;
}
}
Dao层相关类:
//Dao层站点实体类
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import lombok.Data;
/**
* @Description: site实体
* @date 2023-08-07 11:30
*/
@Data
@TableName("p_site")
public class SiteEntity {
@TableId(type = IdType.AUTO)
private Integer siteId;
private String siteLongitude;
private String siteLatitude;
private String siteName;
private Integer status;
}
// Dao层interface
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.pingalax.dao.site.entity.SiteEntity;
import org.apache.ibatis.annotations.Mapper;
/**
* @Description: 站点dao层
* @date 2023-08-07 11:31
*/
@Mapper
public interface SiteDao extends BaseMapper<SiteEntity> {
}
Biz层相关类:
/**
* @Description: 站点相关实现类
* @date 2023-08-07 11:22
*/
@Component
@Transactional
@Slf4j
public class SiteBizImpl implements SiteBiz {
@Autowired
private SiteDao siteDao;
@Override
public PageResult<SiteBo> querySitesPage(QuerySitePageBo querySitePageBo) {
LambdaQueryWrapper<SiteEntity> lambdaQueryWrapper = new LambdaQueryWrapper<>(SiteEntity.class);
lambdaQueryWrapper.eq(querySitePageBo.getStatus() != null, SiteEntity::getStatus, querySitePageBo.getStatus());
IPage<SiteEntity> siteEntityIPage = siteDao.selectPage(PageUtil.createPage(querySitePageBo), lambdaQueryWrapper);
return ResultUtil.convert(siteEntityIPage, SiteBo.class);
}
}
public interface SiteBiz {
/**
* 分页查找site
*
* @return
*/
PageResult<SiteBo> querySitesPage(QuerySitePageBo querySitePageBo);
}
@Data
public class SiteBo implements Serializable {
private Integer siteId;
private String siteLongitude;
private String siteLatitude;
private String siteName;
private Integer status;
}
@Data
@EqualsAndHashCode(callSuper = true)
public class QuerySitePageBo extends BasePage {
private Integer status;
}
/**
* @Description: 分页基础信息
* @date 2023-08-09 8:56
*/
@Getter
@Setter
public class BasePage {
@ApiModelProperty(value = "当前页数(默认值为1)",required = true)
@NotNull(message = "当前页数不能为空")
@Min(value = 1L,message = "当前页数必须大于等于1")
private Long pageIndex;
@ApiModelProperty(value = "每页大小(默认值为10)",required = true)
@NotNull(message = "页码大小不能为空")
@Min(value = -1L,message = "当前页数必须大于等于-1")
private Long pageSize;
}
/**
* @author zhouxiaotao
* @Description: 创建分页对象
* @date 2023-08-09 9:26
*/
public class PageUtil {
public static <T> Page<T> createPage(BasePage basePage){
return new Page<>(basePage.getPageIndex(), basePage.getPageSize());
}
}
/**
* @Description: PageInfo实体
* @date 2023-08-08 13:16
*/
@Data
@NoArgsConstructor
public class PageInfo implements Serializable {
private Long pageIndex;
private Long pageSize;
private Long totalRecord;
private Long totalPage;
}
/**
* @Description: 分页返回结果
* @date 2023-08-08 13:07
*/
public class PageResult<T> extends Result implements Serializable {
// 页面信息
private PageInfo pageInfo;
//返回数据
private List<T> data;
public PageResult() {
}
public PageInfo getPageInfo() {
return pageInfo;
}
public void setPageInfo(PageInfo pageInfo) {
this.pageInfo = pageInfo;
}
public List<T> getData() {
return data;
}
public void setData(List<T> data) {
this.data = data;
}
}
/**
* @Description: 返回结果
* @date 2023-08-08 9:35
*/
public class ResultUtil {
/**
* 转换为分页返回结果
*
* @param page 分页数据
* @param tClass 对象
* @param <T> 对象类型
* @param <E> 数据类型
* @return 分页结果
*/
public static <T, E> PageResult<T> convert(IPage<E> page, Class<T> tClass) {
return ResultUtil.convert(page, tClass, null);
}
/**
* 转换为分页返回结果
*
* @param page 分页数据
* @param tClass 对象
* @param convertFunction 转换方法
* @param <T> 对象类型
* @param <E> 数据类型
* @return 分页结果
*/
public static <T, E> PageResult<T> convert(IPage<E> page, Class<T> tClass, ResultConvertFunction<E, T> convertFunction) {
PageResult<T> pageResult = new PageResult<>();
// 创建返回数据
List<T> data = new ArrayList<>();
if (CollUtil.isNotEmpty(page.getRecords())) {
for (E record : page.getRecords()) {
T convertRecord = BeanUtil.copyProperties(record, tClass);
if (convertFunction != null) {
convertFunction.convert(record, convertRecord);
}
data.add(convertRecord);
}
}
pageResult.setData(data);
PageInfo pageInfo = new PageInfo();
pageInfo.setPageIndex(page.getCurrent());
pageInfo.setPageSize(page.getSize());
pageInfo.setTotalPage(page.getPages());
pageInfo.setTotalRecord(page.getTotal());
pageResult.setPageInfo(pageInfo);
pageResult.setCode(ResultCode.SUCCESS.getCode());
pageResult.setDesc(ResultCode.SUCCESS.getDesc());
return pageResult;
}
}
Controller层相关类:
@Data
@ApiModel("分页查询站点请求参数")
@EqualsAndHashCode(callSuper = true)
public class QuerySitePageRequest extends BasePage {
@ApiModelProperty(value = "站点状态")
private Integer status;
}
@Slf4j
@RestController
@Api(value = "站点管理", tags = "站点管理")
@RequestMapping("/pingalax/basic/site")
public class SiteController {
@Autowired
private SiteBiz siteBiz;
@ApiOperation("通过条件查询站点列表(分页)")
//@Cacheable(value = "PageResult<Site>",key = "#querySitePageRequest")
@ResponseBody
@PostMapping("/selectSiteByPage")
public PageResult<Site> selectSiteByPage(@RequestBody @Valid QuerySitePageRequest querySitePageRequest){
PageResult<SiteBo> siteBoPageResult = siteBiz.querySitesPage(BeanUtil.copyProperties(querySitePageRequest, QuerySitePageBo.class));
return ResultUtil.convert(siteBoPageResult, Site.class);
}
}
第一次写博客,自己记录一下,自己的实际开发过程。