The relationship between generic mapper and mybatis-spring and its similar spring-data-jpa

 

The relationship between generic mapper and mybatis-spring and its similar spring-data-jpa

 

 

 

Integrating things into the framework is to rewrite the interface class of the integrated framework:

 

 

public class MapperScannerConfigurer

  extends org.mybatis.spring.mapper.MapperScannerConfigurer

 

 

 

 

 

 

It can be seen from this that spring-mybatis has the ability to generate a proxy implementation class for mapper, so the general mapper is the omission of the single-table operation.

Generation is mybatis-generator

 

spring-data-jpa:

 

Generate code + proxy + single table operation is omitted

<jpa:repositories base-package="com.esteel.web.dao"></jpa:repositories>

 

ClassPathBeanDefinitionScanner:

 

private BeanNameGenerator beanNameGenerator = new AnnotationBeanNameGenerator();///When the breakpoint is interrupted, I don't know what is the implementation class of the interface. Look at the place injected earlier

 

protected Set<BeanDefinitionHolder> doScan(String... basePackages) {

Assert.notEmpty(basePackages, "At least one base package must be specified");

Set<BeanDefinitionHolder> beanDefinitions = new LinkedHashSet<BeanDefinitionHolder>();

for (String basePackage : basePackages) {////////////////// There can be multiple packages

Set<BeanDefinition> candidates = findCandidateComponents(basePackage);//////////////////////////////Get a mapper

for (BeanDefinition candidate : candidates) {

ScopeMetadata scopeMetadata = this.scopeMetadataResolver.resolveScopeMetadata(candidate);

candidate.setScope(scopeMetadata.getScopeName());

String beanName = this.beanNameGenerator.generateBeanName(candidate, this.registry);///When the breakpoint is interrupted, I don't know which implementation class of the interface is used. Look at the previous injection.

if (candidate instanceof AbstractBeanDefinition) {

postProcessBeanDefinition((AbstractBeanDefinition) candidate, beanName);

}

if (candidate instanceof AnnotatedBeanDefinition) {

AnnotationConfigUtils.processCommonDefinitionAnnotations((AnnotatedBeanDefinition) candidate);

}

if (checkCandidate(beanName, candidate)) {

BeanDefinitionHolder definitionHolder = new BeanDefinitionHolder(candidate, beanName);

definitionHolder = AnnotationConfigUtils.applyScopedProxyMode(scopeMetadata, definitionHolder, this.registry);

beanDefinitions.add(definitionHolder);//////////////All mappers are added to this set

registerBeanDefinition(definitionHolder, this.registry);

}

}

}

return beanDefinitions;

}

 

 

 

 

 

Guess you like

Origin http://43.154.161.224:23101/article/api/json?id=326391180&siteId=291194637