Mybatis调用存储过程返回查询语句
Mybatis调用存储过程返回查询语句
1.首先要在mybatis的配置文件中配置好参数,eg:
<select id="getYearly" parameterType="java.util.Map" statementType="CALLABLE">
<![CDATA[
call BUDGET_DEAL.AP_EX_GETYEARLY(
#{result, mode=OUT, jdbcType=CURSOR, javaType=java.sql.ResultSet,
resultMap=com.shinee.zscz.persistence.YearbudgetrptMapper.ExtendResultMap}(这个返回类型,已经规定的返回值的各个属性)
)
]]>
</select>
2.其中parameterType的参数类型是:
Map<String, Object> params = new HashMap<String, Object>();
yearbudgetrptMapper.getYearly(params);(这个是我掉用的一个存储过程所使用的方法)
return getJson(params.get("result"));这个是返回的值(json的返回类型是String)
3.void getYearly(Map<String, Object> params);这个是方法的接口
4.下面是我定义的一个存储过程
CREATE PROCEDURE mypro(V_CURSOR OUT SYS_REFCURSOR)
IS
BEGIN
OPEN V_CuRSOR FOR SELECT empno, ename, job FROM emp;
END mypro;
如果:查询的内容过多可以使用下面的例子来调用存储过程,eg:
create PROCEDURE mypro(
V_CURSOR OUT SYS_REFCURSOR
)
is
V_SQL VARCHAR2(2048);--定义一个字符串来把要查询的语句变为字符串类型复制给游标
begin
V_SQL := '';
V_SQL := V_SQL || 'select empno,';
V_SQL := V_SQL || ' ename,';
V_SQL := V_SQL || ' job';
V_SQL := V_SQL || ' from emp';
dbms_output.put_line(V_SQL);
open v_cursor for V_SQL;
end mypro;
(这里通过V_SQL,可以进行多个表的关联查询)
通过这个简单的例子就可以直接的调用存储过程,返回的游标里面的内容了
补充:综合编程 , 其他综合 ,