Исключение springboot + mybatis: org.springframework.beans.factory.NoSuchBeanDefinitionException

Я получил следующее исключение:

org.springframework.beans.factory.NoSuchBeanDefinitionException: для зависимости не найдено подходящего bean-компонента типа [pers.panxin.springboot.demo.mapper.UserMapper]: ожидается по крайней мере 1 bean-компонент, который квалифицируется как кандидат autowire для этой зависимости. Аннотации зависимостей: {@org.springframework.beans.factory.annotation.Autowired(required=true)}

Контроллер:

@Controller
public class HelloController {

    @Autowired
    private UserService userService;

    @RequestMapping("/userList")
    @ResponseBody
    public String getAllUser(){
        return "userList : "+userService.getAllUser().toString();//+list.toString();
    }

}

Услуга:

public interface UserService {

    public String getString();

    public List<User> getAllUser();

}

Внедрение службы:

@Service
public class UserServiceImpl implements UserService {

    @Autowired
    private UserMapper userMapper;

    @Override
    public String getString() {
        return "something else ... ";
    }

    @Override
    public List<User> getAllUser() {
        return userMapper.getAllUser();
    }
}

Интерфейс картографа:

@Service
public interface UserMapper {

    /**
     * @return
     */
    public List<User> getAllUser();

}

Основной класс приложения

@ComponentScan
@EnableAutoConfiguration
@SpringBootApplication
public class ApplicationStarter {

    public static void main(String[] args) {
        SpringApplication.run(ApplicationStarter.class, args);
    }

}

как произошло исключение или что-то не так в моем коде?


person Jarvis    schedule 17.01.2016    source источник
comment
это проект maven, созданный IntelliJ IEDA, springboot+mybatis   -  person Jarvis    schedule 17.01.2016


Ответы (3)


1. Я не уверен, что вы используете библиотеку mybatis-spring. Если вы пытаетесь интегрировать MyBatis со Spring, вам следует использовать его. Поэтому убедитесь, что он у вас есть как зависимость.

2. Когда у вас есть mybatis-spring в качестве зависимости, просто добавьте эту аннотацию в свой класс конфигурации:

@MapperScan("package.where.mappers.are.located")

Это связано с тем, что mybatis-spring имеет отдельное сканирование для картографов MyBatis. Также вы должны удалить аннотацию @Service из вашего картографа, потому что если это отдельное сканирование mybatis-spring.

РЕДАКТИРОВАТЬ:

Как указал @Persia, вы можете использовать библиотеку mybatis-spring-boot-starter для извлечения mybatis-spring в ваш проект Spring Boot.

person luboskrnac    schedule 17.01.2016
comment
mybatis-spring-boot-starter зависит от библиотеки mybatis-spring - person Persia; 18.01.2016
comment
Хорошо, не знал об этой библиотеке. Обновлен мой ответ - person luboskrnac; 18.01.2016
comment
Я решил эту проблему, просто потому, что у меня не было конфигурации mybatis, я думал, что он будет автоматически сканировать BeanMapper.xml, но это не так. - person Jarvis; 19.01.2016
comment
но возникла другая проблема. Я попытался вернуть .jsp и сослался на пример springboot на github. но это не удалось. - person Jarvis; 19.01.2016
comment
какое новое исключение? - person Persia; 19.01.2016

Получите ту же ошибку сегодня. Проверьте конфигурацию компонента org.mybatis.spring.mapper.MapperScannerConfigurer и org.mybatis.spring.SqlSessionFactoryBean. Я опечатался в значении «basePackage» для первого и в значении «typeAliasesPackage» для второго. После исправления пути все работает нормально. Как это:

<bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
    <property name="dataSource" ref="dataSource"/>
    <property name="typeAliasesPackage" value="package.path.to.your.model"/>
    <property name="mapperLocations" value="classpath*:mappers/*.xml"/>
</bean>

<bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">
    <property name="basePackage" value="package.path.to.your.dao"/>
</bean>
person Tiina    schedule 24.03.2016
comment
спасибо, я использую springboot projects.spring.io/spring-boot и без настройки XML, и я рекомендую использовать его вместе с ним. Это облегчит вам создание приложения. - person Jarvis; 24.03.2016

Добавьте MappedTypes вместе с @MapperScan с помощью

Код выглядит следующим образом

@MappedTypes({UserMapper.class})

@MapperScan("package.where.mappers.are.located")

person Nadhu    schedule 05.12.2017