java - 用mybatis调用存储函数的java方法

  显示原文与译文双语对照的内容
67 3

我开始学习 Mybatis,我四处搜索如何处理存储的函数。我想知道如何使用mybatis调用存储函数。我可以用这里描述的存储过程来描述 http://loianegroner.com/2011/03/ibatis-mybatis-working-with-stored-procedures/。

先谢谢了。

时间:原作者:0个回答

80 5

你的mapper文件应该有如下内容

<update id="myMappedStatement" parameterType="map" statementType="CALLABLE">
 {#{returnedVal,javaType=String,jdbcType=VARCHAR,mode=OUT} = call myFunc(
 #{myParam1, javaType=String, jdbcType=VARCHAR,
 mode=IN},#{myParam2, javaType=String, jdbcType=VARCHAR,
 mode=IN},#{myParam3, javaType=String, jdbcType=VARCHAR,
 mode=IN})} 
</update>

调用函数应该类似于下面这样:

public String myFunction(Map myParams)
{
//assuming the dao has an Object sqlSessionFactory of type SqlSessionFactory
 SqlSession session = sqlSessionFactory.openSession();
 try
 {
 session.update("myMappedStatement",myParams);
//now myParams contains an entry with key"returnedVal"
 return (String)myParams.get("returnedVal"); 
 }
 catch (Exception ex)
 {
 }finally {
 session.close();
 }
}
原作者:
129 4

你可以将返回值表示为输出参数。

{ CALL #{retval, mode=OUT, jdbcType=INTEGER} = getResult(#{inval, mode=IN, jdbcType=INTEGER})}

至少我在这里找到的是http://mybatis-user.963551.n3.nabble.com/How-to-map-function-call-td3457305.html

原作者:
104 0

我现在用的是这个

<resultMap id="resultBalance" type="Balance">
 <result property="balance" column="BALANCE"/>
</resultMap>
<select id="getBalance" parameterType="Registration" resultMap="resultBalance">
 select MB_CHECK_BALANCE( #{account}, #{msisdn} ) as BALANCE from dual
</select>
原作者:
57 5

你可以使用注释来执行这里操作,如下所示:

@Select(value ="select function(#{param1}, #{param2}) as returnedValueAlias")
public ReturnedType getFunctionValue(
 @Param("param1") Param1Type param1,
 @Param("param2") Param2Type param2);
原作者:
115 0

它在ibatis上工作,因此它也可以在mybatis上工作:

<parameterMap id="obtenerModoConsultaParams" class="java.util.HashMap"> 
 <parameter property="modoConsulta" jdbcType="INTEGER" javaType="java.lang.Integer" mode="OUT"/>
</parameterMap> 
<procedure id="modoConsulta.element" parameterMap="obtenerModoConsultaParams"> 
 {? = call proceso_consulta_ruc.modo_operacion_consulta_ruc ()} 
</procedure>

在JAVA中

public Integer loadModoConsulta() throws Exception {
 Integer result = null;
 HashUtil<String, Object> param = new HashUtil<String, Object>();
 getSqlMapClientTemplate().queryForObject("modoConsulta.element", param);
 result = param.getInt("modoConsulta");
 return result;
} 

这对我有用。

原作者:
...