解决mybatis不同包下面同名mapper bean名重复的问题

如果代码里用了spring+mybatis集成 在不同的包目录下有同名mapper

启动的时候就会报bean名重复

因为mybatis在注册mapper为bean的时候默认用了 接口名首字母小写的方法

为了解决这个问题,有两个方法

1、修改同名mapper(废话。。。)

2、修改mybatis生成bean名的方法(重点)

首先在创建MapperScannerConfigurer的时候指定nameGenerator,有以下两种方法

xml配置 指定nameGenerator 


		

java配置,在mybatis javaConfig类上加上

@MapperScan(nameGenerator = MyNameGenerator.class)

MyNameGenerator如下

package com;

import org.springframework.beans.factory.config.BeanDefinition;
import org.springframework.context.annotation.AnnotationBeanNameGenerator;
import org.springframework.stereotype.Component;
import org.springframework.util.Assert;

@Component("myNameGenerator")
public class MyNameGenerator extends AnnotationBeanNameGenerator {
    @Override
    protected String buildDefaultBeanName(BeanDefinition definition) {
        String beanClassName = definition.getBeanClassName();
        Assert.state(beanClassName != null, "No bean class name set");
        //分割类全路径
        String[] packages = beanClassName.split("\\.");
        StringBuilder beanName = new StringBuilder();
        //取类的包名的首字母小写再加上类名作为最后的bean名
        for (int i = 0; i < packages.length - 1; i++) {
            beanName.append(packages[i].toLowerCase().charAt(0));
        }
        beanName.append(packages[packages.length - 1]);
        return beanName.toString();
    }
}

 

你可能感兴趣的:(解决mybatis不同包下面同名mapper bean名重复的问题)