2017-11-26 16 views
0

私は現在実装していますコメントに対するコメント。Spring MyBatis Mapperに2つのパラメタを書き込む方法は?

メンバーが特定の投稿を閲覧すると、コメントやコメントに関するコメントを見ることができます。

上記の条件を満たすためには、投稿のインデックス値とコメントのインデックス値が必要です。つまり、2つのパラメータ値が必要です。

私は以下のロジックを書いています。

boardDaoMapper.xml

<select id="selectCommentOfComment" parameterType="java.util.HashMap" resultType="java.util.HashMap"> 
    select * from board_comment_of_comment where board_idx = #{board_idx} and board_comm_idx = #{board_comm_idx} 
</select> 

そしてBoardDaoコード:

public List<HashMap<String, Object>> selectCommentOfComment(int board_idx, int board_comm_idx); 

そしてBoardService:

@Override 
public List<HashMap<String, Object>> getBoardCommentOfComment(int board_idx, int board_comm_idx) 
{ 
    System.out.println("ServieImple getBoardCommentOfComment Function Call >> " + board_idx + "/" + board_comm_idx); 
    List<HashMap<String, Object>> c_of_c_list = boardDao.selectCommentOfComment(board_idx, board_comm_idx); 
    return c_of_c_list; 
} 

そしてBoardControllerコード:

@RequestMapping("viewPage.do") 
public String viewPage(HttpSession session,HttpServletRequest request, HttpServletResponse response,Model model, 
     @RequestParam(value="board_idx", defaultValue="1") int board_idx) throws IOException,IllegalStateException 
{ 
    checkLogin(request, response, session); 


    // 해당 게시물에 대한 댓글들의 idx값 조회 (board_comm_idx) 
    List<HashMap<String, Object>> commentList= bService.getBoardForComment(boardData.getBoard_idx()); 

    System.out.println("Board_idx Value was : " + board_idx); 

    // 해당 게시물에 대한 댓글들의 개수만큼 for문을 돌고.. 
    for(int i = 0; i < commentList.size(); i++) 
    { 
     // board_comm_idx 값을 변수에 저장 
     int board_comm_idx= (Integer) commentList.get(i).get("board_comm_idx"); 
     List<HashMap<String, Object>> getCommentOfComentList = 
        bService.getBoardCommentOfComment(board_idx, board_comm_idx); 
     System.out.println("GetCommentOfCommentList : " + getCommentOfComentList); 
     model.addAttribute("cocList", getCommentOfComentList); 
    } 

    return "viewPage"; 
} 

値は、2つのパラメータに適しています。(BoardServiceで)そのような..

ServieImple getBoardCommentOfComment Function Call >> 2/3 

しかし、これはうまく実行してエラーが発生しません。

org.apache.ibatis.binding.BindingException: Parameter 'board_idx' not found. Available parameters are [0, 1, param1, param2] 
    at org.apache.ibatis.binding.MapperMethod$ParamMap.get(MapperMethod.java:165) 
    at org.apache.ibatis.reflection.wrapper.MapWrapper.get(MapWrapper.java:44) 
    at org.apache.ibatis.reflection.MetaObject.getValue(MetaObject.java:116) 
    at org.apache.ibatis.executor.BaseExecutor.createCacheKey(BaseExecutor.java:186) 
    at org.apache.ibatis.executor.CachingExecutor.createCacheKey(CachingExecutor.java:129) 
    at org.apache.ibatis.executor.CachingExecutor.query(CachingExecutor.java:76) 
    at org.apache.ibatis.session.defaults.DefaultSqlSession.selectList(DefaultSqlSession.java:108) 
    at org.apache.ibatis.session.defaults.DefaultSqlSession.selectList(DefaultSqlSession.java:102) 
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) 
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) 
    at java.lang.reflect.Method.invoke(Method.java:498) 
    at org.mybatis.spring.SqlSessionTemplate$SqlSessionInterceptor.invoke(SqlSessionTemplate.java:358) 
    at com.sun.proxy.$Proxy11.selectList(Unknown Source) 
    at org.mybatis.spring.SqlSessionTemplate.selectList(SqlSessionTemplate.java:198) 
    at org.apache.ibatis.binding.MapperMethod.executeForMany(MapperMethod.java:119) 
    at org.apache.ibatis.binding.MapperMethod.execute(MapperMethod.java:63) 
    at org.apache.ibatis.binding.MapperProxy.invoke(MapperProxy.java:52) 
    at com.sun.proxy.$Proxy13.selectCommentOfComment(Unknown Source) 
    at service.BoardServiceImple.getBoardCommentOfComment(BoardServiceImple.java:367) 
    at controller.BoardController.viewPage(BoardController.java:175) 
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) 
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) 
    at java.lang.reflect.Method.invoke(Method.java:498) 
    at org.springframework.web.bind.annotation.support.HandlerMethodInvoker.invokeHandlerMethod(HandlerMethodInvoker.java:180) 
    at org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter.invokeHandlerMethod(AnnotationMethodHandlerAdapter.java:440) 
    at org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter.handle(AnnotationMethodHandlerAdapter.java:428) 
    at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:963) 
    at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:897) 
    at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:970) 
    at org.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServlet.java:861) 
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:635) 
    at org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:846) 
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:742) 

マッパーに問題があると思います。

なぜこのようなことが起こり、どうすれば解決できますか?

ご意見は貴重です。あなたの意見を教えてください。

答えて

2

現在のアプローチの問題

現在お使いのマッピングはこれがケースであることDAO層parameterType="java.util.HashMap"

にあなたのパラメーターを受け入れないように設定でき、iBatisのですHashMapが渡されることを期待しています。

コードを修正する方法はいくつかあります。

1)名前付きパラメータ(バージョンによって)> 3

public List<HashMap<String, Object>> selectCommentOfComment(@Param("board_idx") int board_idx, @Param("board_comm_idx") int board_comm_idx);

そして、あなたのマッピングXMLからパラメータタイプを削除を使用します。

2)期待されるオブジェクト

あなたのマッピングを反映するためにあなたのDAOのメソッドシグネチャを修正することができますに渡します。サービスに対応する変更を行います。

DAO:

public List<HashMap<String, Object>> selectCommentOfComment(HashMap<String, Object> parameter);

サービス:

public List<HashMap<String, Object>> getBoardCommentOfComment(int board_idx, int board_comm_idx) 
{ 
    HashMap<String, Object> parameters = new HashMap<String, Object>(); 
    parameters.put("board_idx", board_idx); 
    parameters.put("board_comm_idx", board_comm_idx"); 
    List<HashMap<String, Object>> c_of_c_list = boardDao.selectCommentOfComment(board_idx, board_comm_idx); 
    return c_of_c_list; 
} 

あなたは自分のドキュメントから追加のインスピレーションを描くことができます。 http://www.mybatis.org/mybatis-3/sqlmap-xml.html

+1

私は解決しましたが、別の問題が発生しました。 私と1:1でチャットできますか? –

+0

問題は何ですか? – shinjw

+1

コメントにコメントを追加し、コメントに別の名前とコメントでログインすると、それらはうまく表示されますが、新しいコメントを作成すると、そのコメントは作成されたコメントには表示されません。ただし、すべての値はログに保存されます。 –

関連する問題