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

MyBatis 調用視圖與存儲過程實戰指南

     編輯:Java 綜合教學

一、調用視圖:同普通 SQL 查詢

視圖在 MyBatis 中視同普通表,僅需在 <select> 中寫視圖名:

<select id="getContactEarnsDetail" resultType="java.util.Map" parameterType="java.lang.Integer">
    select title, trade_time, trade_amount
    from v_contacts_earn
    where user_id = #{userId}
</select>

Mapper 介面:

List<Map<String, Object>> getContactEarnsDetail(Integer userId);

Service 實現:

@Override
public List<Map<String, Object>> getContactEarnsDetail(Integer userId) {
    Assert.notNull(userId);
    return contactEarnsMapper.getContactEarnsDetail(userId);
}

二、調用存儲過程

2.1 返回結果集的存儲過程

假設過程定義:p_my_wallet(IN var_user_id INT),返回 revenue_today、revenue_contacts、balance。

Mapper XML:

<select id="getMyWallet" parameterType="java.lang.Integer" resultType="java.util.Map" statementType="CALLABLE">
    { call p_my_wallet( #{userId, jdbcType=INTEGER, mode=IN} ) }
</select>

關鍵屬性:

  • statementType="CALLABLE":聲明調用存儲過程
  • #{param, jdbcType=..., mode=IN/OUT/INOUT}:參數模式映射

Mapper 介面:

Map<String, Object> getMyWallet(@Param("userId") Integer userId);

2.2 無返回結果集的存儲過程

<select id="cardBuild" statementType="CALLABLE">
    <![CDATA[
    {call p_insert_card_build_info (
        #{is_customized, mode=IN, jdbcType=INTEGER},
        #{face_value, mode=IN, jdbcType=INTEGER},
        #{number, mode=IN, jdbcType=INTEGER}
    )}
    ]]>
</select>

使用 <![CDATA[ ... ]]> 避免特殊字符轉義。

最佳實踐提示

  • 結果集映射建議使用 resultType="Map" 或自定義 @ResultMap。
  • OUT 參數需在 Java 端聲明 mode=OUT 並註冊 jdbcType。
  • 複雜過程可考慮在 Service 層封裝事務邊界。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved