opengoofy / crane4j

一个简单易用的关联字段填充框架,通过简单的注解配置快速根据外键/编码值填充相关字段,支持字典,枚举,方法等多种数据源。 A simple and easy-to-use data mapping framework, quickly populate relevant fields according to foreign keys/encoded values through simple annotation configuration, supports dictionaries, enumerations, methods and other data sources.
http://www.crane4j.cn
Apache License 2.0
216 stars 33 forks source link

crane4j v2.1.0 与 Mybatis Plus v3.5.3.2 兼容问题 #152

Closed urzeye closed 1 year ago

urzeye commented 1 year ago

在使crane4j v2.1.0 与 Mybatis Plus v3.5.3.2的Spring Boot v2.4.2集成环境中,使用 @AssembleMp 注解时,若指定查询字段属,如 selects = {"userName", "userAge"} ,则会抛出如下异常信息:

java.lang.NoSuchMethodError: com.baomidou.mybatisplus.core.conditions.query.QueryWrapper.select([Ljava/lang/String;)Lcom/baomidou/mybatisplus/core/conditions/query/QueryWrapper;

    at cn.crane4j.extension.mybatis.plus.MybatisPlusQueryContainerProvider$Query.getQueryWrapper(MybatisPlusQueryContainerProvider.java:279)
    at cn.crane4j.extension.mybatis.plus.MybatisPlusQueryContainerProvider$Query.invoke(MybatisPlusQueryContainerProvider.java:273)
    at cn.crane4j.core.container.MethodInvokerContainer.get(MethodInvokerContainer.java:80)
    at cn.crane4j.core.executor.handler.OneToOneAssembleOperationHandler.getSourcesFromContainer(OneToOneAssembleOperationHandler.java:84)
    at cn.crane4j.core.executor.handler.AbstractAssembleOperationHandler.doProcess(AbstractAssembleOperationHandler.java:74)
    at cn.crane4j.core.executor.handler.AbstractAssembleOperationHandler.lambda$process$1(AbstractAssembleOperationHandler.java:64)
    at cn.crane4j.core.util.TimerUtil.lambda$getExecutionTime$0(TimerUtil.java:27)
    at cn.crane4j.core.util.TimerUtil.getExecutionTime(TimerUtil.java:44)
    at cn.crane4j.core.util.TimerUtil.getExecutionTime(TimerUtil.java:26)
    at cn.crane4j.core.executor.handler.AbstractAssembleOperationHandler.process(AbstractAssembleOperationHandler.java:61)
    at cn.crane4j.core.executor.DisorderedBeanOperationExecutor.lambda$null$0(DisorderedBeanOperationExecutor.java:63)
    at cn.crane4j.core.executor.AbstractBeanOperationExecutor.tryExecute(AbstractBeanOperationExecutor.java:221)
    at cn.crane4j.core.executor.DisorderedBeanOperationExecutor.lambda$doExecuteOperations$1(DisorderedBeanOperationExecutor.java:63)
    at java.util.HashMap.forEach(HashMap.java:1290)
    at cn.crane4j.core.executor.DisorderedBeanOperationExecutor.doExecuteOperations(DisorderedBeanOperationExecutor.java:63)
    at java.util.HashMap.forEach(HashMap.java:1290)
    at cn.crane4j.core.executor.DisorderedBeanOperationExecutor.executeOperations(DisorderedBeanOperationExecutor.java:54)
    at cn.crane4j.core.executor.AbstractBeanOperationExecutor.lambda$execute$5(AbstractBeanOperationExecutor.java:135)
    at cn.crane4j.core.util.TimerUtil.lambda$getExecutionTime$0(TimerUtil.java:27)
    at cn.crane4j.core.util.TimerUtil.getExecutionTime(TimerUtil.java:44)
    at cn.crane4j.core.util.TimerUtil.getExecutionTime(TimerUtil.java:26)
    at cn.crane4j.core.executor.AbstractBeanOperationExecutor.execute(AbstractBeanOperationExecutor.java:132)
    at cn.crane4j.core.executor.BeanOperationExecutor.execute(BeanOperationExecutor.java:46)
    at cn.crane4j.core.support.OperateTemplate.execute(OperateTemplate.java:168)
    at cn.crane4j.core.support.OperateTemplate.execute(OperateTemplate.java:119)
    at cn.crane4j.core.support.OperateTemplate.executeIfMatchAnyGroups(OperateTemplate.java:45)
    at MpExtensionExampleTest.testPrimaryKeyAndCustomColumns(MpExtensionExampleTest.java:91)
    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.junit.runners.model.FrameworkMethod$1.runReflectiveCall(FrameworkMethod.java:50)
    at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:12)
    at org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java:47)
    at org.junit.internal.runners.statements.InvokeMethod.evaluate(InvokeMethod.java:17)
    at org.springframework.test.context.junit4.statements.RunBeforeTestExecutionCallbacks.evaluate(RunBeforeTestExecutionCallbacks.java:74)
    at org.springframework.test.context.junit4.statements.RunAfterTestExecutionCallbacks.evaluate(RunAfterTestExecutionCallbacks.java:84)
    at org.springframework.test.context.junit4.statements.RunBeforeTestMethodCallbacks.evaluate(RunBeforeTestMethodCallbacks.java:75)
    at org.springframework.test.context.junit4.statements.RunAfterTestMethodCallbacks.evaluate(RunAfterTestMethodCallbacks.java:86)
    at org.springframework.test.context.junit4.statements.SpringRepeat.evaluate(SpringRepeat.java:84)
    at org.junit.runners.ParentRunner.runLeaf(ParentRunner.java:325)
    at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.runChild(SpringJUnit4ClassRunner.java:251)
    at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.runChild(SpringJUnit4ClassRunner.java:97)
    at org.junit.runners.ParentRunner$3.run(ParentRunner.java:290)
    at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:71)
    at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:288)
    at org.junit.runners.ParentRunner.access$000(ParentRunner.java:58)
    at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:268)
    at org.springframework.test.context.junit4.statements.RunBeforeTestClassCallbacks.evaluate(RunBeforeTestClassCallbacks.java:61)
    at org.springframework.test.context.junit4.statements.RunAfterTestClassCallbacks.evaluate(RunAfterTestClassCallbacks.java:70)
    at org.junit.runners.ParentRunner.run(ParentRunner.java:363)
    at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.run(SpringJUnit4ClassRunner.java:190)
    at org.junit.runner.JUnitCore.run(JUnitCore.java:137)
    at com.intellij.junit4.JUnit4IdeaTestRunner.startRunnerWithArgs(JUnit4IdeaTestRunner.java:69)
    at com.intellij.rt.junit.IdeaTestRunner$Repeater$1.execute(IdeaTestRunner.java:38)
    at com.intellij.rt.execution.junit.TestsRepeater.repeat(TestsRepeater.java:11)
    at com.intellij.rt.junit.IdeaTestRunner$Repeater.startRunnerWithArgs(IdeaTestRunner.java:35)
    at com.intellij.rt.junit.JUnitStarter.prepareStreamsAndStart(JUnitStarter.java:232)
    at com.intellij.rt.junit.JUnitStarter.main(JUnitStarter.java:55)
Createsequence commented 1 year ago

看起来像是这个版本的 MP 似乎没有这个 select 的 API?怀疑是 MP 的版本问题,明天我复现看看

Createsequence commented 1 year ago

复现之后发现确实有这个问题,不过 3.5.3.2 版本的 QueryWrapper 确实还是有 select(String... columns) 这个 API,不知道为什么调用会有这个问题。

我尝试升级了一下依赖版本发现问题就解决了,应该还是依赖冲突的问题。