果然不看教程直接使用在遇到问题会懵逼,连解决问题都得搜半天还不一定能帮你解决了。。。
*************************** APPLICATION FAILED TO START *************************** Description: Field mapper in com.demo.service.impl.UserServiceImpl required a bean of type 'com.demo.mapper.UserMapper' that could not be found. Action: Consider defining a bean of type 'com.demo.mapper.UserMapper' in your configuration.
SpringBoot启动失败,告诉我Bean配置失败,楼主看了看 该用的注解都用上了 这是咋的回事嘞?
mapper(Dao层)
1 package com.demo.mapper;
2
3 import org.springframework.context.annotation.ComponentScan;
4 import org.springframework.stereotype.Repository;
5
6 import com.demo.domain.User;
7
8 //@Component
9 @Repository
10 public interface UserMapper {
11
12 public User gYeMian(User u);
13
14 public int sYeMian(User u);
15
16 }
service
package com.demo.service.impl;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import com.demo.domain.User;
import com.demo.mapper.UserMapper;
import com.demo.service.UserService;
@Service(value = "userService")
public class UserServiceImpl implements UserService{
@Autowired
private UserMapper mapper;
@Override
public User gYeMian(User u) {
User user = mapper.gYeMian(u);
return user;
}
@Override
public int sYeMian(User u) {
int i = mapper.sYeMian(u);
return i;
}
}
controller
1 package com.demo.controller;
2
3 import javax.servlet.http.HttpServletRequest;
4
5 import org.springframework.beans.factory.annotation.Autowired;
6 import org.springframework.stereotype.Controller;
7 import org.springframework.web.bind.annotation.RequestMapping;
8 import org.springframework.web.bind.annotation.ResponseBody;
9
10 import com.demo.domain.User;
11 import com.demo.service.UserService;
12
13 @Controller
14 @RequestMapping(value = "/uc")
15 public class UserController {
16
17 @Autowired
18 private UserService userService;
19
20 @ResponseBody
21 @RequestMapping("/stemp.htm")
22 private String sYeMian(String muBan, HttpServletRequest request){
23
24 User u = new User();
25 u.setMuBan(muBan);
26 System.out.println("muBan=" + muBan);
27 int i = userService.sYeMian(u);
28
29 if (i>0){
30 return "存储成功";
31 }
32 return "存储失败";
33 }
34
35 }
后来在网上看到网友说要用@Mapper注解,这才把问题解决了 至于具体原因,楼主还需要好好看看文档再来解释。
解决方案一:
mapper(Dao层)
1 package com.demo.mapper;
2
3 import org.apache.ibatis.annotations.Mapper;
4
5 import com.demo.domain.User;
6
7 @Mapper
8 public interface UserMapper {
9
10 public User gYeMian(User u);
11
12 public int sYeMian(User u);
13
14 }
解决方案二:
Application(启动类)
1 package com.demo;
2
3 import org.mybatis.spring.annotation.MapperScan;
4 import org.springframework.boot.SpringApplication;
5 import org.springframework.boot.autoconfigure.SpringBootApplication;
6
7 @SpringBootApplication
8 @MapperScan(value = "com.demo.mapper")
9 public class App
10 {
11 public static void main(String[] args) throws Exception {
12 SpringApplication.run(App.class, args);
13 }
14 }
原因:在mybatis-spring-boot-autoconfigure的jar包中有一个类 MybatisAutoConfiguration,在这个类中的registerBeanDefinitions方法告诉了我们
1 @Override
2 public void registerBeanDefinitions(AnnotationMetadata importingClassMetadata, BeanDefinitionRegistry registry) {
3
4 logger.debug("Searching for mappers annotated with @Mapper");
5
6 ClassPathMapperScanner scanner = new ClassPathMapperScanner(registry);
7
8 try {
9 if (this.resourceLoader != null) {
10 scanner.setResourceLoader(this.resourceLoader);
11 }
12
13 List<String> packages = AutoConfigurationPackages.get(this.beanFactory);
14 if (logger.isDebugEnabled()) {
15 for (String pkg : packages) {
16 logger.debug("Using auto-configuration base package '{}'", pkg);
17 }
18 }
19
20 scanner.setAnnotationClass(Mapper.class);
21 scanner.registerFilters();
22 scanner.doScan(StringUtils.toStringArray(packages));
23 } catch (IllegalStateException ex) {
24 logger.debug("Could not determine auto-configuration package, automatic mapper scanning disabled.", ex);
25 }
26 }
转:https://www.cnblogs.com/JealousGirl/p/bean.html
|