Параметры не разбираются в моем batis mapper через 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);
и реализация вышеупомянутого вызывает метод уровня данных (первый упомянуто)
1 ответ
Решение
Попробуйте определить ваш маппер так:
public Project getProjectByUserId(@Param("userId") long userIdParam);