mybatis調用mysql存儲過程傳回結果集
存儲過程中常常須要傳回結果集。
Mysql 中直接用 select 就可以傳回結果集。而 oracle 則須要使用遊标來傳回結果集。
這一點 Mysql 相對照較友善。例如以下代碼就可以實作輸出結果集:
存儲過程定義:
DELIMITER $$
DROP procedure IF EXISTS pro_sql_data1 $$
CREATE procedure pro_sql_data1(in sear_name varchar(2000))
BEGIN
if sear_name is not null and sear_name!=\'\' then
select id,name,date_format(create_time,\'%Y-%m-%d\') as repDate from ad_place where
name like concat(\'%\',sear_name,\'%\');
ELSE
select id,name,date_format(create_time,\'%Y-%m-%d\') as repDate from ad_place;
end if;
END$$
DELIMITER;
運作結果:
在mybatis中調用存儲過程,然後擷取該結果集:
1、xml配置檔案
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.ifeng.iis.bean.iis.Report" >
<resultMap type="java.util.HashMap" id="resultMap">
<result column="id" property="id" javaType="java.lang.Integer" jdbcType="INTEGER"/>
<result column="name" property="name" javaType="java.lang.String" jdbcType="VARCHAR"/>
<result column="repDate" property="repDate" javaType="java.lang.String" jdbcType="VARCHAR"/>
<result column="summ" property="summ" javaType="java.lang.Long" jdbcType="BIGINT"/>
</resultMap>
<select id="test123" parameterType="java.util.Map" resultMap="resultMap" statementType="CALLABLE" >
{call pro_sql_data(
#{obj,jdbcType=VARCHAR,mode=IN}
)
}
</select>
</mapper>
java代碼
public String query(String param) throws Exception {
logger.info(param);
Map queryMap = new HashMap();
queryMap.put("obj", param);
//List<Map> listIis1 = reportDao.select4MapParam(queryMap, "currentSql");
List<Map> listIis2 =reportDao.select4MapParam(queryMap,"test123");
return JSONArray.fromObject(listIis2).toString();
}
注:有上面可知,mysql存儲過程中能夠直接使用select語句傳回結果集,并且mybatis能夠直接使用list接收這個結果集(無需遊标)。
參考文章:http://yhjhappy234.blog.163.com/blog/static/316328322012455714892/