2011-12-24 3 views
5

Я пытаюсь создать небольшой инструмент CRUD, и до сих пор все аспекты (интерфейс Rich Faces UI и управляемые компоненты, валидация, база данных mySQL и т. Д.) отлично, но не кусок myBatis.MyBatis mapper для вызова PROC с несколькими параметрами IN

Я относительно новым для myBatis и храню руководство пользователей и API под рукой, но есть еще некоторые вещи, которые просто не придут вместе для меня, и один любой вызов процедуры с участием несколько параметров IN. Вот пример:

Это из БД настроить скрипты:

create procedure MY_FOO_PROC (IN valA VARCHAR(15), IN valB CHAR(1)) 
    begin 
     select blah from blah where blah = valA and blah = valB etc.; 
    end 

Это из MyMapper.java:

public interface MyMapper { 
List<MyFooClass> getProgress (
     @Param("valA") String valueA, @Param("valB") String valueB); 
} 

Это из MyMapper.xml:

<select id="getProgress" parameterType="map" 
    resultMap="MyFooMap" statementType="CALLABLE"> 
    { call MY_FOO_PROC (
     #{valA, mode=IN, jdbcType=VARCHAR} 
     #{valB, mode=IN, jdbcType=CHAR} 
    )} 
</select> 

И, наконец, это из моего класса DAO:

public static List<MyFooClass> 
     doGetProgress (String valueA, String valueB) { 
    SqlSession session = MyBatisConnectionFactory.getInstance().getSqlSessionFactory().openSession(); 
    EsparMapper mapper = session.getMapper(MyMapper.class); 
    List<MyFooClass> listFoo = mapper.getProgress(valueA, valueB); // line which originates exception below 
    session.close(); 
    return listFoo; 
} 

Результат:

### Error querying database. Cause: com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: Incorrect number of arguments for PROCEDURE dbname.MY_FOO_PROC; expected 2, got 1 
### The error may involve my.package.names.getProgress-Inline 
### The error occurred while setting parameters 

Замечу, что я также пытался:

  1. создания POJO с переменными Вала и valB и геттеры/сеттеры для каждого,
  2. решений parameterType="PojoClass" в XML,
  3. , пропуская session.getMapper() и создав экземпляр PojoClass,
  4. и вызов session.selectList("getProgress", pojoInstance);

с почти одинаковым результатом (т.е. неправильное количество аргументов).

Очень мало помогает в сетевом поиске, и большинство из вас говорит, что я делаю то, что, как я думаю, уже сделал.

ответ

4

Я думаю, что в вызове процедуры отсутствует запятая.

<select id="getProgress" parameterType="map" 
    resultMap="MyFooMap" statementType="CALLABLE"> 
    { call MY_FOO_PROC (
     #{valA, mode=IN, jdbcType=VARCHAR} , --<--- this 
     #{valB, mode=IN, jdbcType=CHAR} 
)} 
</select> 
+2

Простые ошибки, подобные этому, являются самыми расстраивающими. Спасибо и с Рождеством! – cobaltduck

Смежные вопросы