Oracle
 sql >> Base de Dados >  >> RDS >> Oracle

Chamando procedimentos armazenados do Oracle com MyBatis


O mapa de resultados fica assim:
<resultMap id="UserResult" type="User">
    <id property="userId" column="userId"/>
    <result property="firstName" column="firstName"/>
    <result property="lastName" column="lastName"/>     
</resultMap>

Em sua instrução select, altere o tipo de parâmetro para java.util.Map.
<select id="getUsers" statementType="CALLABLE" parameterType="java.util.Map"> 
    {call GetUsers(#{users, jdbcType=CURSOR, javaType=java.sql.ResultSet, mode=OUT, resultMap=UserResult})} 
</select>

Sua interface do mapeador se parece com isso, parece que você está chamando isso de DAO. A maneira como eu fiz isso no passado é fazer uma interface de mapeador que é injetada no DAO e o DAO é o que chama os métodos no mapeador. Aqui está um exemplo de interface do mapeador:
public interface UserMapper {
    public Object getUsers(Map<String, Object> params);
}

Essa classe mapeadora seria então injetada em uma classe DAO e faria a chamada assim:
public List<User> getUsers() {
    Map<String, Object> params = new HashMap<String, Object>(); 
    ResultSet rs = null;
    params.put("users", rs);
    userMapper.getUsers(params);
    return ((ArrayList<User>)params.get("users"));
}