MybatisPlus实现分页查询和动态SQL查询的示例代码

网友投稿 1196 2022-12-03

MybatisPlus实现分页查询和动态SQL查询的示例代码

MybatisPlus实现分页查询和动态SQL查询的示例代码

目录一、描述二、实现方式三、 总结

一、描述

实现下图中的功能,分析一下该功能,既有分页查询又有根据计划状态、开始时间、公司名称进行动态查询。

二、实现方式

Controller层

/**

* @param userId 专员的ihttp://d

* @param planState 计划状态

* @param planStartTime 计划开始时间

* @param emtCode 公司名称-分身id

* @return java.util.List

* @Author zhaoxiaodong

* @Description 高级查询-根据计划状态、计划的时间、公司名称查询

* @Date 9:04 2021/9/29

*/

@PostMapping("/selectPlanByStateTimeCompany")

public Page selectPlanByStateTimeCompany(@RequestParam(required = false,defaultValue = "1")int limit, @RequestParam(required = false,defaultValue = "1")int page, @RequestParam(required = true) Long userId,@RequestParam(required = false,defaultValue = "0") int planState,@RequestParam(required = false) String planStartTime,@RequestParam(required = false) Long emtCode) {

//获取该专员下所有状态为未开始的计划

List myPlanList = crmCustomerPlanService.selectNoStartPlan(userId);

if (StringUtil.isNotEmpty(planStartTime)){

//判断计划的开始时间和当前时间

DateTimeFormatter dtf = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");

LocalDateTime planTime = LocalDateTime.parse(planStartTime, dtf);

//存放已逾期的计划

List overDuePlan = new ArrayList<>();

for (CrmCustomerPlan customerPlan : myPlanList) {

if (LocalDateTime.now().isAfter(planTime)) {

//当前时间在计划时间之后,说明过了计划时间,这时候我们要将它的状态改为已逾期

customerPlan.setPlanState(PlanStateEnum.OVERDUE.getCode());

overDuePlan.add(customerPlan);

}

}

if (overDuePlan.size() > 0) {

//遍历完之后,我们就可以对数据进行更改了

crmCustomerPlanService.updateBatchById(overDuePlan);

}

}

//接下来,就是对数据进行查询

return crmCustomerPlanService.selectPlanByStateTimeCompany(limit,page,userId, planState, planStartTime, emtCode);

}

在Controller中有limit、page。limit为每页限制的数量、page为第几页

Service层

/**

* @param userId

* @return java.util.List

* @Author zhaoxiaodong

* @Description 高级查询-根据计划状态、时间、公司名称查询

* @Date 9:06 2021/9/29

*/

@Override

public PgYyFTage selectPlanByStateTimeCompany(int limit,int page,Long userId, int planState, String planStartTime, Long emtCode) {

Page pagelimit= new Page(page,limit);

QueryWrapper crmCustomerPlanQueryWrapper = new QueryWrapper<>();

crmCustomerPlanQueryWrapper.eq("create_user_id", userId);

if (planState!=0){

crmCustomerPlanQueryWrapper.eq("plan_state", planState);

}

if (StringUtil.isNotEmpty(planStartTime)){

crmCustomerPlanQueryWrapper.eq("plan_start_time", planStartTime);

}

if (StringUtil.isNotEmpty(String.valueOf(emtCode))){

crmCustomerPlanQueryWrapper.eq("emt_code", emtCode);

}

return crmCustomerPlanMapper.selectPage(pagelimit,crmCustomerPlanQueryWrapper);

}

在Service层中,可以通过if和QueryWrapper实现动态SQL的查询。

分页,用到了Page对象,一定要是Mybatis的。然后调用selectPage,将对象和查询条件传入进去即可。

三、 总结

MybatisPlus是真的好用,省了我们写很多的SQL语句 以及配置信息

Mybatis的分页配置信息

/**

* 新的分页插件

*/

@Bean

public MybatisPlusInterceptor mybatisPlusInterceptor() {

MybatisPlusInterceptor mybatisPlusInterceptor = new MybatisPlusInterceptor();

mybatisPlusInterceptor.addInnerInterceptor(new PaginationInnerInterceptor(DbType.mysql));

return mybatisPlusInterceptor;

}

版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:基于maven的三种packaging方式
下一篇:mybatis批量新增、删除、查询和修改方式
相关文章

 发表评论

暂时没有评论,来抢沙发吧~