当前使用版本(必填,否则不予处理)
3.4.3.4
该问题是如何引起的?(确定最新版也有问题再提!!!)
由于groovy方法引用报错
userService.lambdaQuery().eq(User::name, '123456').one()
但是好像报错了
nested exception is org.apache.ibatis.builder.BuilderException: Error evaluating expression 'ew.sqlSegment != null and ew.sqlSegment != '' and ew.nonEmptyOfNormal'. Cause: org.apache.ibatis.ognl.OgnlException: sqlSegment [java.lang.ClassCastException: com.example.demo.Demo1ApplicationTests$_contextLoads_closure3$_closure4 cannot be cast to com.baomidou.mybatisplus.core.toolkit.support.SFunction]
org.mybatis.spring.MyBatisSystemException: nested exception is org.apache.ibatis.builder.BuilderException: Error evaluating expression 'ew.sqlSegment != null and ew.sqlSegment != '' and ew.nonEmptyOfNormal'. Cause: org.apache.ibatis.ognl.OgnlException: sqlSegment [java.lang.ClassCastException: com.example.demo.Demo1ApplicationTests$_contextLoads_closure3$_closure4 cannot be cast to com.baomidou.mybatisplus.core.toolkit.support.SFunction]
at org.mybatis.spring.MyBatisExceptionTranslator.translateExceptionIfPossible(MyBatisExceptionTranslator.java:96)
at org.mybatis.spring.SqlSessionTemplate$SqlSessionInterceptor.invoke(SqlSessionTemplate.java:441)
at com.sun.proxy.$Proxy73.selectList(Unknown Source)
at org.mybatis.spring.SqlSessionTemplate.selectList(SqlSessionTemplate.java:224)
at com.baomidou.mybatisplus.core.override.MybatisMapperMethod.executeForMany(MybatisMapperMethod.java:166)
at com.baomidou.mybatisplus.core.override.MybatisMapperMethod.execute(MybatisMapperMethod.java:77)
at com.baomidou.mybatisplus.core.override.MybatisMapperProxy$PlainMethodInvoker.invoke(MybatisMapperProxy.java:148)
at com.baomidou.mybatisplus.core.override.MybatisMapperProxy.invoke(MybatisMapperProxy.java:89)
at com.sun.proxy.$Proxy81.selectList(Unknown Source)
at com.baomidou.mybatisplus.core.mapper.BaseMapper.selectOne(BaseMapper.java:174)
at java.lang.invoke.MethodHandle.invokeWithArguments(MethodHandle.java:627)
重现步骤(如果有就写完整)
报错信息
Comment From: qmdx
未做适配
Comment From: hgdhfq
groovy.zip
我用groovy编写了一些适配,可以使用我提供的适配包进行闭包链式调用。
使用方法:
1、修改Service继承类
原来的继承方式:
interface ModelService extends IService<Model>
修改后的继承方式
interface ModelService extends IGService<Model>
2、链式调用修改 以前的方式:
modelService.lambdaQuery().eq(Model::getRefId , 56).last('limit 10').list() //查询
modelService.lambdaUpdate()
.set(Model::getOpen, 64.2951).set(Model::getClose, 44.3303)
.eq(Model::getRefId , 55).eq(Model::getTime,1689859860).update() //更新
modelService.lambdaUpdate()
.eq(Model::getRefId , 55).eq(Model::getTime,1689859860).remove() //删除
闭包调用方式:
modelService.closureQuery().eq(Model::getRefId , 56).last('limit 10').list() //查询
modelService.closureUpdate()
.set(Model::getOpen, 64.2951).set(Model::getClose, 44.3303)
.eq(Model.&getRefId , 55).eq(Model::getTime,1689859860).update() //更新 (闭包支持两种写法 Model.&getRefId 和 Model::getRefId)
modelService.closureUpdate()
.eq(Model.&getRefId , 55).eq(Model::getTime,1689859860).remove() //删除