2015-04-06 48 views
0

我有以下方法解析到我的batis映射器,參數不是通過一個java.util.Map

public Project getProjectByUser(long userId) 
      throws IOException { 

     SqlSession sqlSession = null; 
     Project response = null; 

     Map<String, Long> projectParam = new HashMap<String, Long>(); 
     projectParam.put("userId", userId); 

     try { 

      sqlSession = DBSessionManager.getInstance().getSessionFactory() 
        .openSession(); 

      LOG.debug("SqlSession opened for Project mapper"); 

      ProjectMapper projectMapper = sqlSession 
        .getMapper(ProjectMapper.class); 

      sqlSession.insert("getProjectByUserId", projectParam); 
      sqlSession.commit(); 

      response = projectMapper.getProjectByUserId(userId); 

     } finally { 
      if (sqlSession != null) { 
       sqlSession.close(); 
       LOG.debug("SqlSession closed"); 
      } else { 
       System.out.println("_sql session null"); 
      } 

     } 

     return response; 
    } 

而且在XML文件中我有下面的代碼。

<select id="getProjectByUserId" resultMap="projectResultMap" 
     parameterType="map" flushCache="false" useCache="false"> 
     SELECT 
     project_id, 
     user_id, project_name, 
     created_date, 
     last_updated_date FROM 
     project 
     WHERE 
     user_id=#{userId} 
    </select> 

當我替換(硬編碼的值)user_id=#{userId}一部分user_id=1預期的結果被返回。但是,當我從客戶端應用程序傳遞它時,雖然值正確設置爲映射,但查詢並不正確,並導致空返回。我在這裏做錯了什麼。

我ProjectMapper類的方法定義是,

public Project getProjectByUserId(long userIdParam); 

更新: 以下是服務接口的方法,

@GET 
@Path("{userId}/{projectName}") 
@Produces("application/json") 
public Project getProjectByUser(@PathParam("userId") long userId); 

和執行上述調用數據層方法(第一提及)

回答

2

嘗試像這樣定義你的映射器:

public Project getProjectByUserId(@Param("userId") long userIdParam); 
+0

感謝您的快速回復,我已經更新了這個問題,我已經有了這個方法,我將這個值傳遞給數據層,請參閱更新 –

+0

好的,我現在看到。但沒關係 - 你仍然需要在數據層方法上使用@Param註解。 '@ Param'是myBatis需要知道如何將'userIdParam'注入到SQL中的。它與'@ PathParam'無關,它實際上是Web映射所需要的。 –

+0

@IsuruGunawardana請看我上面的評論,讓我知道它是否有幫助... –