視圖在 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);
}
假設過程定義: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);
<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。mode=OUT 並註冊 jdbcType。