Mybatis如何调用存储过程和函数

一、procedure

Mybatis调用存储过程

 如上图所示是procedure的参数,IN代表入参,OUT代表出参,IN OUT既可以作为入参又可以作为出参

(1)procedure的入参和出参可以封装为一个实体类,调用procedure后,出参自动赋值到实例中

    <resultMap id="BaseResultMap" type="com.huarun.bjjghis.entity.ReserveTimeRegInfo">
        <result property="wxOrderId" column="orderid" javaType="string" jdbcType="VARCHAR"></result>
        <result property="tsStartTime" column="beginyysj" javaType="string" jdbcType="VARCHAR"></result>
        <result property="tsEndTime" column="endyysj" javaType="string" jdbcType="VARCHAR"></result>
        <result property="deptCode" column="l_ksdm" javaType="string" jdbcType="VARCHAR"></result>
        <result property="drCode" column="l_ysdm" javaType="string" jdbcType="VARCHAR"></result>
        <result property="timeSlice" column="l_zblb" javaType="int" jdbcType="INTEGER"></result>
        <result property="registrationTime" column="l_ghsj" javaType="string" jdbcType="DATE"></result>
        <result property="lockTime" column="l_shsj" javaType="string" jdbcType="DATE"></result>
        <result property="status" column="Zt" javaType="string" jdbcType="VARCHAR"></result>
        <result property="errorMsg" column="err" javaType="string" jdbcType="VARCHAR"></result>
        <result property="hisRegNo" column="his_reg_no" javaType="string" jdbcType="VARCHAR"></result>
        <result property="mdFlag" column="md_flag" javaType="int" jdbcType="INTEGER"></result>
    </resultMap>

(2)procedure调用

    <select id="reserveTimeRegInfo"
            parameterType="com.huarun.bjjghis.entity.ReserveTimeRegInfo"
            resultMap="BaseResultMap" statementType="CALLABLE">
        {
            call sp_sh(#{wxOrderId, mode=IN, jdbcType=VARCHAR},
                       #{tsStartTime, mode=IN, jdbcType=VARCHAR},
                       #{tsEndTime, mode=IN, jdbcType=VARCHAR},
                       #{deptCode, mode=IN, jdbcType=VARCHAR},
                       #{drCode, mode=IN, jdbcType=VARCHAR},
                       #{timeSlice, mode=IN, jdbcType=INTEGER},
                       to_date(#{registrationTime, mode=IN}, 'yyyy-mm-dd hh24:mi:ss'),
                       to_date(#{lockTime, mode=IN}, 'yyyy-mm-dd hh24:mi:ss'),
                       #{status, mode=OUT, jdbcType=VARCHAR},
                       #{errorMsg, mode=OUT, jdbcType=VARCHAR},
                       #{hisRegNo, mode=OUT, jdbcType=VARCHAR},
                       #{mdFlag, mode=OUT, jdbcType=INTEGER})
        }
    </select>

二、Function

    <select id="getSchCount" parameterType="java.util.Map" statementType="CALLABLE">
         {#{l_sl, mode=OUT, jdbcType=INTEGER} = call F_GETGHSYSL_wx(to_date(#{l_gzrq, mode=IN, jdbcType=DATE}, 'YYYY-MM-DD'),
                                                                   #{l_ksdm, mode=IN, jdbcType=VARCHAR},
                                                                   #{l_ysdm, mode=IN, jdbcType=VARCHAR},
                                                                   #{l_yysj, mode=IN, jdbcType=VARCHAR},
                                                                   #{l_jssj, mode=IN, jdbcType=VARCHAR},
                                                                   #{l_zblb, mode=IN, jdbcType=INTEGER})
         }
    </select>

在service传入Map到Dao

        parameterMap.put("l_gzrq", regDate);
        parameterMap.put("l_ksdm", deptCode);
        parameterMap.put("l_ysdm", drCode);
        parameterMap.put("l_zblb", l_zblb);

        parameterMap.put("l_yysj", null);
        parameterMap.put("l_jssj", null);

        parameterMap.put("l_sl", 0);

猜你喜欢

转载自www.cnblogs.com/qiaohan9090/p/13181576.html