Spring Boot | MyBatis项目结构无法连接图层

时间:2017-05-19 10:47:57

标签: spring spring-boot mybatis

无法在 Spring Boot |中连接图层MyBatis 应用程序。当Service层使用Mapper时,可能会发生此问题。

控制器方法示例:

@Controller
@RequestMapping("demo")
public class MessageController {

    @Autowired
    private MessageService messageService;

    @RequestMapping(value = "messages", method = RequestMethod.GET)
    public String getMessages(ModelMap modelMap) {
        modelMap.addAttribute(MESSAGE,  
                      messageService.selectMessages());
        return "messages";
}

服务类:

@Service
public class MessageService {

    @Autowired   // Not sure if I can use Autowired here.
    private MessageMapper messageMapper;

    public MessageService() {
    }

    public Collection<Message> selectMessages() { return 
         messageMapper.selectAll(); }

}

MyBatis Mapper

@Mapper
public interface MessageMapper {
    @Select("select * from message")
    Collection<Message> selectAll();
} 

更新

感觉我有一些基本的知识错误。可能管理外部库。

这里是maven pom.xml。看起来有点过载,我在管理不同的spring-boot软件包时面临很多错误。包括自动配置的入门。 pom.xml

这是项目结构:

enter image description here

更新#2

我确信数据库连接运行良好,我可以在Spring Boot正在执行schema.sqldata.sql时跟踪MySQL Workbench中的更改。但不知何故,MyBatis映射器方法抛出 NullPointerException ,页面继续退出代码500.似乎他们无法连接。

1 个答案:

答案 0 :(得分:1)

MessageService不受spring管理。

您必须使用@Service注释来注释MessageService类(同样,在添加此注释之后,您确实可以在服务类中使用@Autowired)

@Service
public class MessageService {
  @Autowired  
  private MessageMapper messageMapper;

  public Collection<Message> selectMessages() { 
    return messageMapper.selectAll(); 
  }
}

并使用

将其连接到控制器
@Autowired 
private MessageService messageService

并在像这样的方法中使用它

@RequestMapping(value = "messages", method = RequestMethod.GET)
public String getMessages(ModelMap modelMap) {
    modelMap.addAttribute(MESSAGE,  messageService.selectMessages());
    return "messages";
}