千家信息网

如何编写MybatisPlus实现分页查询和动态SQL查询

发表于:2025-02-23 作者:千家信息网编辑
千家信息网最后更新 2025年02月23日,本篇内容主要讲解"如何编写MybatisPlus实现分页查询和动态SQL查询",感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习"如何编写MybatisPlus实
千家信息网最后更新 2025年02月23日如何编写MybatisPlus实现分页查询和动态SQL查询

本篇内容主要讲解"如何编写MybatisPlus实现分页查询和动态SQL查询",感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习"如何编写MybatisPlus实现分页查询和动态SQL查询"吧!

目录
  • 一、描述

  • 二、实现方式

  • 三、 总结

一、描述

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

二、实现方式

Controller层

   /**     * @param userId        专员的id     * @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 Page 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;  }

到此,相信大家对"如何编写MybatisPlus实现分页查询和动态SQL查询"有了更深的了解,不妨来实际操作一番吧!这里是网站,更多相关内容可以进入相关频道进行查询,关注我们,继续学习!

0