Spring MVC+Mybatis 執行存儲過程,使用Map進行參數的傳遞


研究了一天mybatis如何執行存儲過程,基本了解了ORM的設計思想,在map層面進行對象關系映射有兩種思路。

根據不同的業務使用不同的思路:

一、實體類和數據庫映射,就是將數據庫中的字段和java實體類中的對象對應起來,這是最普遍的做法。

就是這個樣子:

  <resultMap id="BaseResultMap" type="com.kt.model.Funeral" >
    <id column="applyid" property="applyid" jdbcType="BIGINT" />
    <id column="no" property="no" jdbcType="SMALLINT" />
    <result column="employeecd" property="employeecd" jdbcType="BIGINT" />
    <result column="agentcd" property="agentcd" jdbcType="BIGINT" />
    <result column="applydate" property="applydate" jdbcType="DATE" />
    <result column="applytype" property="applytype" jdbcType="SMALLINT" />
    <result column="startday" property="startday" jdbcType="DATE" />
    <result column="endday" property="endday" jdbcType="DATE" />
    <result column="applyreason" property="applyreason" jdbcType="VARCHAR" />
    <result column="detailreason" property="detailreason" jdbcType="VARCHAR" />
    <result column="applytime" property="applytime" jdbcType="TIMESTAMP" />
    <result column="admitflg" property="admitflg" jdbcType="SMALLINT" />
  </resultMap>
  

二、將數據庫的字段和java的Map對應起來,也就是key-value的形式,個人認為這種方法適合存儲過程的執行,因為存儲過程的參數很多情況下都是通過自定義

來進行參數傳遞的。這樣,就ORM的形式更加靈活。

具體實例:

1、dao層接口定義

public interface IFuneralDao {
    
    void saveFuneral(Map<String, Object> funeralMap);
    
    void getFuneral(Map<String, Object> funeralMap);
    
    @SuppressWarnings("rawtypes")
    List<Map> getFuneralMore(@Param("applyId") Long applyId);
}

2、dao層對應mapper.xml

 <!-- 添加數據 -->
  <parameterMap type="Map" id="InsertFuneralMap">
    <parameter property="v_in_employeecd" jdbcType="BIGINT" javaType="Long" mode="IN" />
    <parameter property="v_in_applytype" jdbcType="SMALLINT" javaType="Short" mode="IN" />
    <parameter property="v_in_applyreason" jdbcType="VARCHAR" javaType="String" mode="IN" />
    <parameter property="v_in_detailreason" jdbcType="VARCHAR" javaType="String" mode="IN" />
    <parameter property="v_in_startend" jdbcType="VARCHAR" javaType="String" mode="IN" />
    <parameter property="v_in_agentcd" jdbcType="BIGINT" javaType="Long" mode="IN" />
    <parameter property="o_result" jdbcType="SMALLINT" javaType="Short" mode="OUT"/>
 </parameterMap>
  
   <select id="saveFuneral" parameterMap="InsertFuneralMap" statementType="CALLABLE">  
      {call workplan.proc_insertfuneral_info(
              ?,?,?,?,?,?,?
      ) }  
  </select>  
  
  <!-- 抽取數據,返回多個結果存到List<Map>中-->
  <resultMap type="Map" id="getFuneralMoreResult">
     <result column="employeecd" property="employeecd" javaType="Long" jdbcType="BIGINT" />
     <result column="employeename" property="employeename" javaType="String" jdbcType="VARCHAR"/>
     <result column="applytype" property="applytype" javaType="Short" jdbcType="SMALLINT"/>
     <result column="reason" property="reason" javaType="String" jdbcType="VARCHAR"/>
     <result column="startend" property="startend" javaType="String" jdbcType="VARCHAR"/>
     <result column="days" property="days" javaType="String" jdbcType="VARCHAR"/>
     <result column="method" property="method" javaType="Integer" jdbcType="SMALLINT"/>
  </resultMap>
  
  <!-- 查詢信息 -->
 <sql id="funeral_info_single" >
    "employeecd", "employeename", "applytype", "reason", "startend", "days", "method"
  </sql>
  
  <select id="getFuneralMore"  resultMap="getFuneralMoreResult">
          select 
           <include refid="funeral_info_single" />
           from
           workplan.proc_getfuneral_info(#{applyId,jdbcType=BIGINT})
  </select>
  
  <!-- 查詢單條數據 -->
  <parameterMap type="Map" id="getFuneralMap">
    <parameter property="v_in_applyid" jdbcType="BIGINT" javaType="Long" mode="IN" />
    <parameter property="employeecd" jdbcType="BIGINT" javaType="Long" mode="OUT" />
    <parameter property="employeename" jdbcType="VARCHAR" javaType="String" mode="OUT" />
    <parameter property="applytype" jdbcType="SMALLINT" javaType="Short" mode="OUT" />
    <parameter property="reason" jdbcType="VARCHAR" javaType="String" mode="OUT" />
    <parameter property="startend" jdbcType="VARCHAR" javaType="String" mode="OUT" />
    <parameter property="days" jdbcType="SMALLINT" javaType="Short" mode="OUT"/>
    <parameter property="method" jdbcType="SMALLINT" javaType="Short" mode="OUT"/>
 </parameterMap>
  
   <select id="getFuneral" parameterMap="getFuneralMap" statementType="CALLABLE">  
      {call workplan.proc_getfuneral_info(
              ?,?,?,?,?,?,?,?
      ) }  
  </select>  
  

3、service層調用

@Service("funeralService")
public class FuneralServiceImpl implements IFuneralService {
    @Resource
    private IFuneralDao funeralDao;
    
    /**
     * 添加信息
     * 將參數通過Map傳入到數據庫后,返回值同樣會保存到傳入值的那個Map中
     * @param funeralProc
     * @return 1、成功 0、失敗
     */
    public boolean saveFuneral(Map<String, Object> funeralMap) {
        funeralDao.saveFuneral(funeralMap); 
        return (Short) funeralMap.get("o_result")>0;
    }
    
    /**
     * 獲取單條信息
     */
    public Map<String , Object> getFuneral(Map<String, Object> funeralMap){
        funeralDao.getFuneral(funeralMap);
        return funeralMap;
    }
    /**
     * 獲取多條數據,用List存取
     */
    @SuppressWarnings("rawtypes")
    public List<Map> getFuneralMore(Long applyId) {
        return funeralDao.getFuneralMore(applyId);
    }

    
}

轉載請標明地址:http://www.cnblogs.com/huaxingtianxia/p/5628828.html


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM