2

я получил следующее исключение:springboot + mybatis Исключение: org.springframework.beans.factory.NoSuchBeanDefinitionException

org.springframework.beans.factory.NoSuchBeanDefinitionException: Нет квалификационную боб типа [pers.panxin.springboot .demo.mapper.UserMapper], найденный для зависимости: ожидается не менее 1 бит, который квалифицируется как кандидат на автоподключение для этой зависимости. Зависимость от аннотаций: {@ org.springframework.beans.factory.annotation.Autowired (обязательно = истина)}

Контроллер:

@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(); 

} 

ServiceImpl:

@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); 
    } 

} 

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

+0

Это проект maven, созданный IntelliJ IEDA, springboot + mybatis –

ответ

0

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

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

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

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

EDIT:

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

+0

mybatis-spring-boot-starter зависит от библиотеки mybatis-spring – Persia

+0

ОК, не знал об этой библиотеке.Обновлен мой ответ – luboskrnac

+0

Я решил эту проблему, просто потому, что у меня не было конфигурации mybatis, я думал, что она автоматически сканирует BeanMapper.xml, но это не так. –

0

Получить такую ​​же ошибку сегодня. Проверьте конфигурацию компонента 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> 
+0

Спасибо, я использую springboot http://projects.spring.io/spring-boot/ и без конфигурации XML, и я рекомендую использовать с ним. Было бы проще создать приложение для вас. –

0

Добавить MappedTypes вместе с @MapperScan с

код выглядит ниже

@MappedTypes ({UserMapper.class})

@MapperScan ("package.where .mappers.arelocated ")

Смежные вопросы