MySQL 存儲過程中直接使用 SELECT 即可返回結果集,無需像 Oracle 那樣使用游標,極其方便。
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 ;
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"https://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_data1( #{obj, jdbcType=VARCHAR, mode=IN} )}
</select>
</mapper>
public String query(String param) throws Exception {
Map queryMap = new HashMap<>();
queryMap.put("obj", param);
// 直接接收 List
SYS_REFCURSOR OUT 參數並註冊類型MySQL 存儲過程返回結果集極其簡單,MyBatis 原生支持,業務代碼零負擔。