*MyBatis调用存储过程*
今天在项目中用到需要调用存储过程,很多人以前没写过。所以在此把调用详细过程记录。
1.数据库中有一个create or replace package body pkg_public_int
其中pkg_public_int为数据库的包。其中包含有一个存储过程procedure get_data
过程由2个入参数,2个出参组成。
(
p_int_id in varchar2,
p_input_filter in varchar2,
o_cursor_rst out type_ref_cur,
o_rst_rows out integer
)
2.JAVA代码组织参数。Map<String, Object> param = new HashMap<String, Object>();
String filter = “1111";
param.put("p_int_id", "BMAP_GET_BMAP_INFO");
param.put("p_input_filter", filter);
param.put("o_cursor_rst", OracleTypes.CURSOR);
param.put("o_rst_rows", OracleTypes.INTEGER);
myUserMapper.queryMapList(param);
List<Model> list = (List<Model>) param.get("o_cursor_rst")
这里参数的传递是用Map格式。 执行存储过程之后,会自动将返回的参数写入param中对应的出参中。
3.mapper.xml配置
//游标返回的结果对应的实体
<resultMap id="resultMap" type="com.mybatis.entities.Model">
<result column="VALUE_FZ" jdbcType="VARCHAR" property="valueFz" />
<result column="VALUE_FM" jdbcType="VARCHAR" property="valueFm" />
<result column="VALUE_LV" jdbcType="VARCHAR" property="valueLv" />
</resultMap>
//传递的参数map property对应的是JAVA代码param中的key
<parameterMap id="paramMap" type="java.util.HashMap">
<parameter property="p_int_id" mode="IN" jdbcType="VARCHAR" javaType="java.lang.String"/>
<parameter property="p_input_filter" mode="IN" jdbcType="VARCHAR" javaType="java.lang.String"/>
<parameter property="o_cursor_rst" mode="OUT" jdbcType="CURSOR" javaType="java.sql.ResultSet" resultMap="tclMap"/>
<parameter property="o_rst_rows" mode="OUT" jdbcType="INTEGER" javaType="java.lang.Integer"/>
</parameterMap>
//调用存储过程。 parameterMap对应上面定义的参数map。
<select id="queryMapList" statementType="CALLABLE" parameterMap="paramMap" resultType="java.util.Map">
<![CDATA[
{call pkg_public_int.get_data(?,?,?,?)}
]]>
</select>