2017-05-19 11 views
0

レイヤーを配線できませんスプリングブート| MyBatisアプリケーション。この問題は、サービス層がMapperを使用しているときに起こりそうです。スプリングブーツ| MyBatisプロジェクト構造はレイヤーを配線できません

コントローラ方法試料:

@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 
public interface MessageMapper { 
    @Select("select * from message") 
    Collection<Message> selectAll(); 
} 

更新

私はいくつかの基本的な知識に基づいて間違いがあるように感じています。おそらく外部ライブラリを管理しています。

ここにはpom.xmlがあります。オーバーロードされているように見えますが、私はさまざまなスプリングブートパッケージを管理する際に多くのエラーに直面しました。自動設定用のスターターが含まれています。ここで pom.xml

は、プロジェクト構造です:

enter image description here

UPDATE#2

私はDB接続がうまく機能していると確信している、私は、MySQLのワークベンチ間の変化を追跡することができますよスプリングブートはschema.sqldata.sqlを実行しています。しかし、どういうわけか、MyBatisマッパーのメソッドはNullPointerExceptionを投げ、ページは終了コード500に進みます。接続できないようです。

+1

のような方法でそれを使用しますice(); 'これはSpringのコントロールの外にインスタンスを生成し、自動配線は起こりません。あなたは 'MessageService'をコントローラにも注入する必要があります。 –

+0

@M。 Deinum、私はそれについて考えていた。しかし、@Autowired private MessageService messageServiceとして注入しようとすると、IDEAによって下線が引かれ、コンパイルされません。 –

+1

また、 'MessageService'に' @Service'を注釈する必要があります。そうでなければ、それは検出されません。また、私はそれがコンパイルされないことに疑いを持っています。私はあなたのIDEが 'MessageService'が自動配線できないとあなたに伝えていると思います。 –

答えて

1

MessageServiceは春に管理されていません。あなたは

とコントローラに(また、この注釈を追加した後、あなたが実際にサービスクラス内@Autowiredを使用することができます)@Serviceアノテーションで

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

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

とワイヤーそれをMessageServiceクラスに注釈を付ける必要があり

@Autowired 
private MessageService messageService 

とあなたは `新しいMessageServを行っている。この

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

このように注釈を付けると、 '@Autowired MessageMapper'宣言はIDEAによって下線が引かれ、コンパイルされません。 –

+0

デフォルトのコンストラクタ – Janar

+0

を削除しても、動作しません。 –

関連する問題