存儲過程中經常需要返回結果集。 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
注:有上面可知,mysql存儲過程中可以直接使用select語句返回結果集,而且mybatis可以直接使用list接收這個結果集(無需游標)。