Mybatis-Plus分页和根据日期查询数据

我目前使用的mybatis-plus是3.2.0版本,目前最新的版本是3.4.2。由于项目写了很多,不方便改成最新版。

最新版和本版本也有不少差距,但是均可忽略。

就本版本而言,主要讨论两个问题,一个是分页,一个是根据日期查询。

1.分页

首先按照官方文档,编写一个配置类:

|-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| import com.baomidou.mybatisplus.extension.plugins.PaginationInterceptor; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; /** * @ClassName: * @author: flitsneak nonagon * @date: 2021/3/12 */ @Configuration public class MybatisPlusConfig { @Bean public PaginationInterceptor paginationInterceptor(){ PaginationInterceptor paginationInterceptor = new PaginationInterceptor(); return paginationInterceptor; } } |

接下来编写vo用来接收前端传来的参数,分别为起始页码和当前页还有分页条件,这里的分页条件为petId是个String。

|--------------------------------------------------------------------------------------------------------------------------------------------|
| @Data public class PetPageVO implements Serializable { private String petId; private Integer currPage; private Integer pageSize; } |

然后controller:

|--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| /** * 分页查询宠物病例历史列表 * @param petPageVO * @return */ @PostMapping("/listPetExamByPetId") public R listPetExamByPetId(@RequestBody PetPageVO petPageVO){ String pageNo = petPageVO.getCurrPage().toString(); String pageSize = petPageVO.getPageSize().toString(); String petId = petPageVO.getPetId(); Map map = new HashMap(); map.put("page",pageNo); map.put("limit",pageSize); map.put("petId",petId); PageUtils pageUtils = petExamService.queryPage(map); return new R(true,StatusCode.PETEXAMLISTSUCCESS.getCode(),StatusCode.PETEXAMLISTSUCCESS.getMsg(),pageUtils); } |

这里要注意不要用Integer,会提示转换失败报错,我们可以看mybatis-plus底层是怎么做的:

|-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| public class Query<T> { public IPage<T> getPage(Map<String, Object> params) { return this.getPage(params, null, false); } public IPage<T> getPage(Map<String, Object> params, String defaultOrderField, boolean isAsc) { //分页参数 long curPage = 1; long limit = 10; if(params.get(Constant.PAGE) != null){ curPage = Long.parseLong((String)params.get(Constant.PAGE)); } if(params.get(Constant.LIMIT) != null){ limit = Long.parseLong((String)params.get(Constant.LIMIT)); } //分页对象 Page<T> page = new Page<>(curPage, limit); //分页参数 params.put(Constant.PAGE, page); //排序字段 //防止SQL注入(因为sidx、order是通过拼接SQL实现排序的,会有SQL注入风险) String orderField = SQLFilter.sqlInject((String)params.get(Constant.ORDER_FIELD)); String order = (String)params.get(Constant.ORDER); //前端字段排序 if(StringUtils.isNotEmpty(orderField) && StringUtils.isNotEmpty(order)){ if(Constant.ASC.equalsIgnoreCase(order)) { return page.addOrder(OrderItem.asc(orderField)); }else { return page.addOrder(OrderItem.desc(orderField)); } } //没有排序字段,则不排序 if(StringUtils.isBlank(defaultOrderField)){ return page; } //默认排序 if(isAsc) { page.addOrder(OrderItem.asc(defaultOrderField)); }else { page.addOrder(OrderItem.desc(defaultOrderField)); } return page; } } |

可以看到这里的params.get(Constant.PAGE)如果不为空则读取参数curPage = Long.parseLong((String)params.get(Constant.PAGE)),这里有个转换,先转换为整形再转换为string。Constant.PAGE 其实就是page。

然后我们分页即可:

|----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| @Service("PetExamService") public class PetExamServiceImpl extends ServiceImpl<PetExamDao, PetExamEntity> implements PetExamService { @Override public PageUtils queryPage(Map<String, Object> params) { LambdaQueryWrapper<PetExamEntity> lambdaQueryWrapper = new LambdaQueryWrapper<>(); lambdaQueryWrapper.eq(PetExamEntity::getPetId,params.get("petId")) .select(); IPage<PetExamEntity> page = this.page( new Query<PetExamEntity>().getPage(params), lambdaQueryWrapper ); return new PageUtils(page); } } |

2.根据日期查询

日期的处理一向比较严肃,mybatis-plus没有提供函数处理,所以要使用apply进行编写对应函数。

本案例是接收前端传入的日期数组并查询数据。

controller层:

|--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| /** * 根据日期范围查看宠物历史记录 * @param dateArrays * @return */ @PostMapping("/listPetHistoryExamByDateArray/{petId}") public R listPetHistoryExamByDateArray(@PathVariable String petId,@RequestBody String[] dateArrays){ LambdaQueryWrapper<PetExamEntity> lambdaQueryWrapper = new LambdaQueryWrapper<>(); lambdaQueryWrapper.eq(PetExamEntity::getPetId,petId); for (int i = 0; i < dateArrays.length; i++) { lambdaQueryWrapper.apply("TO_DAYS(create_time) = TO_DAYS('"+dateArrays[i]+"')") .or(); } lambdaQueryWrapper.select(); List<PetExamEntity> list = petExamService.list(lambdaQueryWrapper); return new R(true,StatusCode.PETEXAMLISTBYHISTORYARRAYSUCCESS.getCode(),StatusCode.PETEXAMLISTBYHISTORYARRAYSUCCESS.getMsg(),list); } |

注意这里的apply里面传递的实际是sql,不要忘记加or否则是and连接。

相关推荐
014-code4 小时前
订单超时取消与库存回滚的完整实现(延迟任务 + 状态机)
java·开发语言
lly2024065 小时前
组合模式(Composite Pattern)
开发语言
游乐码5 小时前
c#泛型约束
开发语言·c#
Dontla5 小时前
go语言Windows安装教程(安装go安装Golang安装)(GOPATH、Go Modules)
开发语言·windows·golang
chushiyunen5 小时前
python rest请求、requests
开发语言·python
铁东博客5 小时前
Go实现周易大衍筮法三变取爻
开发语言·后端·golang
baidu_huihui5 小时前
在 CentOS 9 上安装 pip(Python 的包管理工具)
开发语言·python·pip
南 阳5 小时前
Python从入门到精通day63
开发语言·python
lbb 小魔仙5 小时前
Python_RAG知识库问答系统实战指南
开发语言·python
java1234_小锋5 小时前
Java高频面试题:Springboot的自动配置原理?
java·spring boot·面试