当前使用版本(必填,否则不予处理)

3.0.7.1

该问题是如何引起的?(确定最新版也有问题再提!!!)

条件构造器中 apply(boolean condition, String applySql, Object... params) 中的 condition 没有生效

重现步骤(如果有就写完整)

这种写法不行

@Override
public PageUtils selectByPaymentDateAndFactoryCode(Map<String, Object> params) {

    // 获取缴费日期
    Date paymentDate = Convert.toDate(params.get("paymentDate"));
    // 获取厂区代码
    String factoryCode = Convert.toStr(params.get("factoryCode"));
    QueryWrapper<SalaryWaterStatisticsEntity> queryWrapper = new QueryWrapper<SalaryWaterStatisticsEntity>()
            .apply(ObjectUtil.isNotNull(paymentDate), "year(payment_date) = {0} and month(payment_date) = {1}", DateUtil.year(paymentDate), DateUtil.month(paymentDate) + 1)
            .eq(ObjectUtil.isNotNull(factoryCode), "factory_code", factoryCode)
            // 根据缴费日期降序
            .orderByDesc("payment_date");

    // 根据缴费日期和厂区代码进行查询(可单查,可双查)
    IPage<SalaryWaterStatisticsEntity> page = this.page(
            new Query<SalaryWaterStatisticsEntity>().getPage(params),
            queryWrapper
    );

    return new PageUtils(page);
}

这种写法可以

@Override
public PageUtils selectByPaymentDateAndFactoryCode(Map<String, Object> params) {

    // 获取缴费日期
    Date paymentDate = Convert.toDate(params.get("paymentDate"));
    // 获取厂区代码
    String factoryCode = Convert.toStr(params.get("factoryCode"));
    QueryWrapper<SalaryWaterStatisticsEntity> queryWrapper = new QueryWrapper<SalaryWaterStatisticsEntity>()
            .eq(ObjectUtil.isNotNull(factoryCode), "factory_code", factoryCode)
            // 根据缴费日期降序
            .orderByDesc("payment_date");

    if (ObjectUtil.isNotNull(paymentDate)) {
        queryWrapper.apply("year(payment_date) = {0} and month(payment_date) = {1}", DateUtil.year(paymentDate), DateUtil.month(paymentDate) + 1);
    }

    // 根据缴费日期和厂区代码进行查询(可单查,可双查)
    IPage<SalaryWaterStatisticsEntity> page = this.page(
            new Query<SalaryWaterStatisticsEntity>().getPage(params),
            queryWrapper
    );

    return new PageUtils(page);
}

报错信息

java.lang.NullPointerException: null
    at cn.hutool.core.date.DateTime.<init>(DateTime.java:103)
    at cn.hutool.core.date.DateTime.of(DateTime.java:44)
    at cn.hutool.core.date.DateUtil.year(DateUtil.java:179)
        // 第 271 行就是 `apply(ObjectUtil.isNotNull(paymentDate), "year(payment_date) = {0} and month(payment_date) = {1}", DateUtil.year(paymentDate), DateUtil.month(paymentDate) + 1)` 这一句报错
    at com.greatoo.modules.app.service.impl.SalaryWaterStatisticsServiceImpl.selectByPaymentDateAndFactoryCode(SalaryWaterStatisticsServiceImpl.java:271)
    at com.greatoo.modules.app.service.impl.SalaryWaterStatisticsServiceImpl$$FastClassBySpringCGLIB$$31538.invoke(<generated>)
    at org.springframework.cglib.proxy.MethodProxy.invoke(MethodProxy.java:218)
    at org.springframework.aop.framework.CglibAopProxy$DynamicAdvisedInterceptor.intercept(CglibAopProxy.java:684)
    at com.greatoo.modules.app.service.impl.SalaryWaterStatisticsServiceImpl$$EnhancerBySpringCGLIB$$e2ba0d89.selectByPaymentDateAndFactoryCode(<generated>)
    at com.greatoo.modules.salary.controller.SalaryWaterStatisticsController.selectByPaymentDateAndFactoryCode(SalaryWaterStatisticsController.java:82)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.lang.reflect.Method.invoke(Method.java:498)
    at org.springframework.web.method.support.InvocableHandlerMethod.doInvoke(InvocableHandlerMethod.java:189)
    at org.springframework.web.method.support.InvocableHandlerMethod.invokeForRequest(InvocableHandlerMethod.java:138)
    at org.springframework.web.servlet.mvc.method.annotation.ServletInvocableHandlerMethod.invokeAndHandle(ServletInvocableHandlerMethod.java:102)
    at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.invokeHandlerMethod(RequestMappingHandlerAdapter.java:895)
    at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.handleInternal(RequestMappingHandlerAdapter.java:800)
    at org.springframework.web.servlet.mvc.method.AbstractHandlerMethodAdapter.handle(AbstractHandlerMethodAdapter.java:87)
    at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:1038)
    at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:942)
    at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:1005)
    at org.springframework.web.servlet.FrameworkServlet.doPost(FrameworkServlet.java:908)
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:660)
    at org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:882)
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:741)
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:231)
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)
    at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:53)
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193)
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)
    at org.apache.shiro.web.servlet.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:112)
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193)
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)
    at com.greatoo.common.xss.XssFilter.doFilter(XssFilter.java:25)

Comment From: miemieYaho

java基础

Comment From: Matthew2Qiao

java基础

condition 条件判断,条件符合执行后面语句,我使用 eqcondition 时可以(不写 condition 在外面写 if 也可以),但是 applycondition 就不行,只有在外面使用不加 conditionif 才可以

wrapper.eq(ObjectUtil.isNotNull(factoryCode), "factory_code", factoryCode)
// 上面和下面写法都可以使用,上下两种写法都为factory为空则语句不执行
if (ObjectUtil.isNotNull(factoryCode)) {
    wrapper.eq("factory_code", factoryCode)
}
wrapper.apply(ObjectUtil.isNotNull(paymentDate), "year(payment_date) = {0} and month(payment_date) = {1}", DateUtil.year(paymentDate), DateUtil.month(paymentDate) + 1)
// 上面如果paymentDate为空会报null的错误,而不是不执行后面的语句,下面写法paymentDate为空则语句不执行
if (ObjectUtil.isNotNull(paymentDate)) {
    wrapper.apply("year(payment_date) = {0} and month(payment_date) = {1}", DateUtil.year(paymentDate), DateUtil.month(paymentDate) + 1);
}