研究了一天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