Я скопировал текст отсюда: http://code.google.com/p/mybatis/issues/detail?id=164,, но мы столкнулись с той же проблемой.
MyBatis версия 3.0.1
Я использую MyBatis 3 в качестве отображения OR междуJava-приложение и база данных Sybase.Sql, используемый для запроса данных из базы данных, является хранимой процедурой, это нормально для простой процедуры, но если есть внутренняя переменная, объявленная и используемая в хранимой процедуре, кажется, что она работает неправильно, результат запроса будет нулевым, в то время какЭто не исключение.
ниже приведен пример кода, и я также прикрепляю в качестве вложения.JavaBean:
public class Test {
private String input1;
private String input2;
public String getInput1() {
return input1;
}
public void setInput1(String input1) {
this.input1 = input1;
}
public String getInput2() {
return input2;
}
public void setInput2(String input2) {
this.input2 = input2;
}
}
sqlMap:
<mapper namespace="cargoStatus_shipment">
<resultMap id="testMap" type="com.icil.esolution.cargoStatus.AS.model.Test">
<result column="result1" jdbcType="VARCHAR" property="input1" />
<result column="result2" jdbcType="VARCHAR" property="input2" />
</resultMap>
<select id="getValidData" statementType="CALLABLE" resultMap="testMap" parameterType="String">
{call tempdb..testSP #{in}}
</select>
</mapper>
хранимая процедура:
use tempdb
go
drop proc testSP
go
create proc testSP
@in varchar(10)
as
declare @var char(3)
select @var="XXX"
select result1= '1', result2=@in
go
grant exec on testSP to public
go
Java-код:
public class TestSP {
private static SqlSessionFactory createSqlMapper() throws IOException {
String resource = "resources/sqlMapConfig.xml";
Reader reader = Resources.getResourceAsReader(resource);
return new SqlSessionFactoryBuilder().build(reader,"development");
}
public static void main(String[] args) {
SqlSession session=null;
try {
session = createSqlMapper().openSession(ExecutorType.SIMPLE, true); //autocommit = true
} catch (Exception e) {
e.printStackTrace();
System.out.println("Error in open Session. Cause: " + e);
System.exit(1);
}
List result = (List) session.selectList("getValidData", "mydata");
System.out.println("Result = "+result);
System.out.println(result.get(2).getInput2());
}
}
обычно результат долженбыть:
<code>DEBUG PreparedStatement - ==> Executing: {call tempdb..testSP ?}
DEBUG PreparedStatement - ==> Parameters: mydata(String)
DEBUG ResultSet -
но на самом деле, нет результата get, также нет исключений:
DEBUG PreparedStatement - ==> Executing: {call tempdb..testSP ?}
DEBUG PreparedStatement - ==> Parameters: mydata(String)
после контр-теста, если я удалю внутреннюю переменную @var из sp, то онавсе будет в порядке.
use tempdb
go
drop proc testSP
go
create proc testSP
@in varchar(10)
as
select result1= '1', result2=@in
go
grant exec on testSP to public
go
</code>
Не могли бы вы проверить, в чем проблема и что мне делать, чтобы убедиться, что я могу вызвать этот вид хранимой процедуры?