This commit is contained in:
parent
d2dccecc7b
commit
a7833d270d
@ -0,0 +1,39 @@
|
|||||||
|
/*
|
||||||
|
* Copyright (c) 2011-2020, baomidou (jobob@qq.com).
|
||||||
|
* <p>
|
||||||
|
* Licensed under the Apache License, Version 2.0 (the "License"); you may not
|
||||||
|
* use this file except in compliance with the License. You may obtain a copy of
|
||||||
|
* the License at
|
||||||
|
* <p>
|
||||||
|
* https://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
* <p>
|
||||||
|
* Unless required by applicable law or agreed to in writing, software
|
||||||
|
* distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
|
||||||
|
* WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
|
||||||
|
* License for the specific language governing permissions and limitations under
|
||||||
|
* the License.
|
||||||
|
*/
|
||||||
|
package com.baomidou.mybatisplus.core;
|
||||||
|
|
||||||
|
import org.apache.ibatis.builder.annotation.MethodResolver;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 继承 {@link MethodResolver}
|
||||||
|
*
|
||||||
|
* @author miemie
|
||||||
|
* @since 2019-01-05
|
||||||
|
*/
|
||||||
|
public class InjectorResolver extends MethodResolver {
|
||||||
|
|
||||||
|
private final MybatisMapperAnnotationBuilder annotationBuilder;
|
||||||
|
|
||||||
|
public InjectorResolver(MybatisMapperAnnotationBuilder annotationBuilder) {
|
||||||
|
super(annotationBuilder, null);
|
||||||
|
this.annotationBuilder = annotationBuilder;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void resolve() {
|
||||||
|
annotationBuilder.parserInjector();
|
||||||
|
}
|
||||||
|
}
|
@ -117,13 +117,22 @@ public class MybatisMapperAnnotationBuilder extends MapperAnnotationBuilder {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
// TODO 注入 CURD 动态 SQL , 放在在最后, because 可能会有人会用注解重写sql
|
// TODO 注入 CURD 动态 SQL , 放在在最后, because 可能会有人会用注解重写sql
|
||||||
if (GlobalConfigUtils.isSupperMapperChildren(configuration, type)) {
|
try {
|
||||||
GlobalConfigUtils.getSqlInjector(configuration).inspectInject(assistant, type);
|
// https://github.com/baomidou/mybatis-plus/issues/3038
|
||||||
|
if (GlobalConfigUtils.isSupperMapperChildren(configuration, type)) {
|
||||||
|
parserInjector();
|
||||||
|
}
|
||||||
|
} catch (IncompleteElementException e) {
|
||||||
|
configuration.addIncompleteMethod(new InjectorResolver(this));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
parsePendingMethods();
|
parsePendingMethods();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void parserInjector() {
|
||||||
|
GlobalConfigUtils.getSqlInjector(configuration).inspectInject(assistant, type);
|
||||||
|
}
|
||||||
|
|
||||||
private boolean canHaveStatement(Method method) {
|
private boolean canHaveStatement(Method method) {
|
||||||
// issue #237
|
// issue #237
|
||||||
return !method.isBridge() && !method.isDefault();
|
return !method.isBridge() && !method.isDefault();
|
||||||
|
@ -15,7 +15,6 @@
|
|||||||
*/
|
*/
|
||||||
package com.baomidou.mybatisplus.core;
|
package com.baomidou.mybatisplus.core;
|
||||||
|
|
||||||
import org.apache.ibatis.builder.annotation.MapperAnnotationBuilder;
|
|
||||||
import org.apache.ibatis.builder.annotation.MethodResolver;
|
import org.apache.ibatis.builder.annotation.MethodResolver;
|
||||||
|
|
||||||
import java.lang.reflect.Method;
|
import java.lang.reflect.Method;
|
||||||
@ -31,9 +30,9 @@ public class MybatisMethodResolver extends MethodResolver {
|
|||||||
private final MybatisMapperAnnotationBuilder annotationBuilder;
|
private final MybatisMapperAnnotationBuilder annotationBuilder;
|
||||||
private final Method method;
|
private final Method method;
|
||||||
|
|
||||||
public MybatisMethodResolver(MapperAnnotationBuilder annotationBuilder, Method method) {
|
public MybatisMethodResolver(MybatisMapperAnnotationBuilder annotationBuilder, Method method) {
|
||||||
super(annotationBuilder, method);
|
super(annotationBuilder, method);
|
||||||
this.annotationBuilder = (MybatisMapperAnnotationBuilder) annotationBuilder;
|
this.annotationBuilder = annotationBuilder;
|
||||||
this.method = method;
|
this.method = method;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -45,6 +45,7 @@ import static java.util.stream.Collectors.joining;
|
|||||||
* @author hubin
|
* @author hubin
|
||||||
* @since 2018-04-06
|
* @since 2018-04-06
|
||||||
*/
|
*/
|
||||||
|
@SuppressWarnings("serial")
|
||||||
public abstract class AbstractMethod implements Constants {
|
public abstract class AbstractMethod implements Constants {
|
||||||
protected static final Log logger = LogFactory.getLog(AbstractMethod.class);
|
protected static final Log logger = LogFactory.getLog(AbstractMethod.class);
|
||||||
|
|
||||||
|
@ -34,7 +34,7 @@ import org.apache.ibatis.mapping.SqlSource;
|
|||||||
* @author hubin
|
* @author hubin
|
||||||
* @since 2018-04-06
|
* @since 2018-04-06
|
||||||
*/
|
*/
|
||||||
@SuppressWarnings("all")
|
@SuppressWarnings("serial")
|
||||||
public class Insert extends AbstractMethod {
|
public class Insert extends AbstractMethod {
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
@ -0,0 +1,46 @@
|
|||||||
|
package com.baomidou.mybatisplus.core;
|
||||||
|
|
||||||
|
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
|
||||||
|
import lombok.Data;
|
||||||
|
import lombok.EqualsAndHashCode;
|
||||||
|
import org.apache.ibatis.annotations.CacheNamespace;
|
||||||
|
import org.apache.ibatis.annotations.CacheNamespaceRef;
|
||||||
|
import org.junit.jupiter.api.Test;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @author miemie
|
||||||
|
* @since 2020-11-07
|
||||||
|
*/
|
||||||
|
class MybatisMapperAnnotationBuilderTest {
|
||||||
|
|
||||||
|
@Test
|
||||||
|
void parse() {
|
||||||
|
MybatisConfiguration configuration = new MybatisConfiguration();
|
||||||
|
MybatisMapperAnnotationBuilder a = new MybatisMapperAnnotationBuilder(configuration, AMapper.class);
|
||||||
|
a.parse();
|
||||||
|
MybatisMapperAnnotationBuilder b = new MybatisMapperAnnotationBuilder(configuration, BMapper.class);
|
||||||
|
b.parse();
|
||||||
|
configuration.getMappedStatement(AMapper.class.getName() + ".insert");
|
||||||
|
}
|
||||||
|
|
||||||
|
@CacheNamespaceRef(BMapper.class)
|
||||||
|
interface AMapper extends BaseMapper<A> {
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
@CacheNamespace
|
||||||
|
interface BMapper extends BaseMapper<B> {
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
@Data
|
||||||
|
private static class A {
|
||||||
|
private Long id;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Data
|
||||||
|
@EqualsAndHashCode(callSuper = true)
|
||||||
|
private static class B extends A {
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
Loading…
x
Reference in New Issue
Block a user