本篇内容主要讲解“如何编写MybatisPlus实现分页查询和动态SQL查询”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“如何编写MybatisPlus实现分页查询和动态SQL查询”吧!
一、描述
二、实现方式
三、 总结
实现下图中的功能,分析一下该功能,既有分页查询又有根据计划状态、开始时间、公司名称进行动态查询。
Controller层
/** * @param userId 专员的id * @param planState 计划状态 * @param planStartTime 计划开始时间 * @param emtCode 公司名称-分身id * @return java.util.List<com.hc360.crm.entity.po.PlanCustomer> * @Author zhaoxiaodong * @Description 高级查询-根据计划状态、计划的时间、公司名称查询 * @Date 9:04 2021/9/29 */ @PostMapping("/selectPlanByStateTimeCompany") public Page<CrmCustomerPlan> 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<CrmCustomerPlan> 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<CrmCustomerPlan> 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<com.hc360.crm.entity.po.PlanCustomer> * @Author zhaoxiaodong * @Description 高级查询-根据计划状态、时间、公司名称查询 * @Date 9:06 2021/9/29 */ @Override public Page<CrmCustomerPlan> selectPlanByStateTimeCompany(int limit,int page,Long userId, int planState, String planStartTime, Long emtCode) { Page<CrmCustomerPlan> pagelimit= new Page(page,limit); QueryWrapper<CrmCustomerPlan> 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; }
到此,相信大家对“如何编写MybatisPlus实现分页查询和动态SQL查询”有了更深的了解,不妨来实际操作一番吧!这里是亿速云网站,更多相关内容可以进入相关频道进行查询,关注我们,继续学习!
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。