当前使用版本(必填,否则不予处理)
3.0.7.1
该问题是如何引起的?(确定最新版也有问题再提!!!)
condition 条件判断,条件符合执行后面语句,我使用 eq 的 condition 时是正常的(不写 condition 在外面写 if 也可以),但是 apply 的 condition 就不行,只有在外面使用不加 condition 的 if 才是正常的
重现步骤(如果有就写完整)
wrapper.eq(ObjectUtil.isNotNull(factoryCode), "factory_code", factoryCode)
// 上面和下面写法都可以使用,上下两种写法都为factoryCode为空则语句不执行(两种写法测试正常)
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);
}
报错信息
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: helloshisheng
java基础懂不懂!函数执行入参就得安排明白
我之前没看懂以为老哥很暴躁。后来才发现我java基础确实不好
Comment From: helloshisheng
补充一下
LambdaQueryChainWrapper<>(demoMapper)
.eq(demoBO!= null, DemoDO::getEnabled, demoBO.getEnabled())
我想的是当demoBO!=null的时候后面都不会执行。但是这不是代码执行的逻辑,它首先要入参,入参又不会判断demoBO是不是为null
Comment From: Matthew2Qiao
.eq(StrUtil.isNotBlank(hrPayGradeEntity.getPayType()), "pay_type", hrPayGradeEntity.getPayType())和
.like(StrUtil.isNotBlank(hrPayGradeEntity.getPayDutiesName()), "pay_duties_name", hrPayGradeEntity.getPayDutiesName())和
.in(employeeState != null && employeeState == 0, "employee_state", 1, 2)和
.between(hireDateBegin != null && hireDateEnd != null, "hire_date", hireDateBegin, hireDateEnd)
项目中都是这样写的,也有效果,刚好看到官方文档更新的时候,apply(boolean condition, String applySql, Object... params)多了个condition,可以简化代码,习惯性就使用上面那种写法,就没去想入参的问题