首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 數據庫知識 >  >> MySQL 資料庫 >> MySQL 綜合教學

MyBatis 調用 MySQL 存儲過程返回結果集:無需游標直接映射 List

     編輯:MySQL 綜合教學

MyBatis 調用 MySQL 存儲過程返回結果集:無需游標直接映射 List

1. MySQL 存儲過程返回結果集特性

MySQL 存儲過程中直接使用 SELECT 即可返回結果集,無需像 Oracle 那樣使用游標,極其方便。

2. 存儲過程定義

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 ;

3. MyBatis Mapper XML 配置

<?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>

4. Java 調用代碼

public String query(String param) throws Exception {
    Map queryMap = new HashMap<>();
    queryMap.put("obj", param);
    
    // 直接接收 List
    List list = reportDao.select4MapParam(queryMap, "test123");
    
    return JSONArray.fromObject(list).toString();
}

5. 關鍵點總結

  • statementType="CALLABLE":聲明調用存儲過程
  • #{param, mode=IN}:指定參數模式(IN/OUT/INOUT)
  • resultMap 映射:將結果集列映射到 Map/POJO 屬性
  • 直接返回 List:MyBatis 自動處理結果集游標,無需手動獲取
  • 對比 Oracle:必須使用 SYS_REFCURSOR OUT 參數並註冊類型
MySQL 存儲過程返回結果集極其簡單,MyBatis 原生支持,業務代碼零負擔。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved