springboot + mybatis例外:org.springframework.beans.factory.NoSuchBeanDefinitionException

时间:2016-01-17 12:45:58

标签: spring dependency-injection spring-boot mybatis spring-mybatis

我遇到以下异常:

  

org.springframework.beans.factory.NoSuchBeanDefinitionException:没有为依赖项找到类型为[pers.panxin.springboot.demo.mapper.UserMapper]的限定bean:预计至少有一个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();

}

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

}

我的代码中是如何发生异常或出错的?

3 个答案:

答案 0 :(得分:0)

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项目。

答案 1 :(得分:0)

今天得到同样的错误。检查bean配置org.mybatis.spring.mapper.MapperScannerConfigurerorg.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>

答案 2 :(得分:0)

使用

添加MappedTypes和@MapperScan

代码如下所示

@MappedTypes({UserMapper.class})

@MapperScan(&#34; package.where.mappers.are.located&#34)