在Mybatis调用Mysql的存储过程获取输出参数
mysql存储过程
create PROCEDURE p_getAreaList(in vfid int,out areas varchar(200))
BEGIN
SET @areas='ok';
SELECT * from mytable;//业务代码...
SET areas=@areas;//返回参数
END
接口DAO.java代码如下
// 获取区域名称队列
public List<HashMap<String, Object>> getAreaList(HashMap<String, Object> map);
使用List接收返回的数据集,用map传入参数,并自动带回出参值。
xml代码如下
<!-- 查询区域名称列表 -->
<select id="getAreaList" resultMap="userMap" parameterType="java.util.HashMap" statementType="CALLABLE">
{call p_getAreaList(#{fid},#{areas,mode=OUT,jdbcType=VARCHAR})}
</select>
注意:后面需要加上statementType参数,值为"CALLABLE"。call必须放在{ }里面(调用没有出参的存储过程时,可以省略{ },但带出参存储过程不可缺少),并且输出参数areas必须有mode=OUT修饰。否则无法获取到输出参数。
areas 是出参类型,执行完存储过程后,出参值会自动赋值给该值。还需要
Controller代码如下
hmap.put("fid", fid);
hmap.put("areas", "");
userDao.getAreaList(hmap);
logger.info(hmap.get("areas"));//获取返回的输出参数的值
使用map.get(“areas”)即可获取到出参值。