果然不看教程直接使用在遇到問題會懵逼,連解決問題都得搜半天還不一定能幫你解決了
。。。
***************************
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
