导致异常 |
Example.Builder exampleBuilder = Example.builder(DsmPdcVm.class); if (!insList.isEmpty()) { exampleBuilder.andWhere(WeekendSqls.<DsmPdcVm>custom().andIn(DsmPdcVm::getVmId, vmIdList));//就是这行代码 } |
异常信息如下 |
09:52:54.133 [DsmResponseBodyAdvice.processControllerException] - 当前实体类不包含名为lambda$1的属性! tk.mybatis.mapper.MapperException: 当前实体类不包含名为lambda$1的属性! at tk.mybatis.mapper.entity.Example$Builder.column(Example.java:1056) at tk.mybatis.mapper.entity.Example$Builder.transformCriterion(Example.java:1039) at tk.mybatis.mapper.entity.Example$Builder.build(Example.java:1018) at com.ai.dsm.xc.service.impl.XcInsServiceImpl.listXcIns(XcInsServiceImpl.java:55) at com.ai.dsm.xc.controller.XcInsController.list(XcInsController.java:54) 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:497) at org.springframework.web.method.support.InvocableHandlerMethod.doInvoke(InvocableHandlerMethod.java:205) at org.springframework.web.method.support.InvocableHandlerMethod.invokeForRequest(InvocableHandlerMethod.java:133) at oerServlet.java:901) |
最终解决办法:
将:exampleBuilder.andWhere(WeekendSqls.<DsmPdcVm>custom().andIn(DsmPdcVm::getVmId, vmIdList));
改为:exampleBuilder.andWhere(WeekendSqls.custom().andIn("vmId", vmIdList));
问题解决
思考:
同样的andIn方法,一个加了实体类泛型,一个直接用的String表达式,而前者就报错。
Lambda表达式是JDK8的新特性,为我们带来了很多便利,包栝排列字符串,方法与构造函数引用:Java 8 允许你使用 :: 关键字来传递方法或者构造函数引用,以及访问局部变量我们可以直接在lambda表达式中访问外层的局部变量,Lambda 作用域:在lambda表达式中访问外层作用域和老版本的匿名对象中的方式很相似。你可以直接访问标记了final的外层局部变量,或者实例的字段以及静态变量。