Я читаю книгу «MyBatis in Practice» и не могу понять, почему код на странице 67-68 не работает. Вот проблема. Речь идет о вызове хранимых процедур, и это работает, но реальной проблемой является то, что я не могу понять, как заполнить карту ввода с помощью набора результатов. Итак, вот код из основного класса:Как я могу заполнить карту параметров с помощью набора результатов в MyBatis
public void callReadAllPets() throws Exception {
HashMap<String, List<PetDVO>> inputMap = new HashMap<String, List<PetDVO>>();
List<PetDVO> petList = new ArrayList<PetDVO>();
inputMap.put("petData", petList);
//
getSqlSession().selectList("callReadAllPets", inputMap);
List<PetDVO> outputData = inputMap.get("petData");
printResultList(outputData, "read_all_pets");
}
private void printResultList(List<PetDVO> list) {
for (PetDVO item : list) {
System.out.println(" owner: " + item.getOwner());
System.out.println(" species: " + item.getSpecies());
System.out.println(" sex: " + item.getSex());
}
}
PetDVO - это просто ПОЖАРОЧКА Java. Вот код из mapper.xml
<select id="callReadAllPets" resultType="PetDVO" statementType="CALLABLE">
CALL read_all_pets('SELECT name, owner, species, sex, birth, death FROM pet')
После выполнения предыдущего кода, список outputData пуст, т.е. безлюдный с результатами. Это способ, предложенный в книге, но это не работает для меня? Как я могу это решить? стр. Я использую MyBatis 3.2.3
У вашего оператора вызова нет какого-либо параметра с именем «petData»? –
Хм ... @Florian Schaetz, это звучит разумно, но я не могу проверить его прямо сейчас, поскольку у меня нет книги со мной. Это похоже на lapsus calami в книге, так как кажется, что правильным ответом может быть resultMap = "petData" вместо resultType = "PetDVO", но я не помню, что отображение petData происходит в любом месте файла mapper? Я проверю его позже. Благодарю. –
Я все равно смущен, так как вы делаете resultType, что означает, что вы ожидаете, что callReadAllPets вернет значение, но вы не получите возвращаемое значение из 'getSqlSession(). SelectList ('. Вместо этого вы, похоже, ожидаете его в объекте параметра без фактического наличия параметра OUT ... –