Spring启动| MyBatis 项目结构不能连线层

Spring Boot | MyBatis project structure can't wire layers

无法在 Spring 引导中连接图层 | 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";
}

服务class:

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

更新

感觉我犯了一些基于基础知识的错误。可能管理外部库。

这是专家 pom.xml。看起来有点过载,我在管理不同的 spring-boot 包时遇到了很多错误。包含用于自动配置的启动器。 pom.xml

项目结构如下:

更新#2

我确定数据库连接运行良好,我能够在 MySQL Workbench 中跟踪更改,而 Spring 引导正在执行 schema.sqldata.sql。但不知何故,MyBatis 映射器方法抛出 NullPointerException 并且页面继续执行退出代码 500。似乎它们无法连接。

MessageService 不由 spring 管理。

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

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