mybatisのselectKey作用


抜粋:http://lelglin.iteye.com/blog/1452403
 
ibatisを使ってデータをデータベースに挿入する時、いくつかのsequenceのデータを使います.挿入が完了したら、sequenceの値を返してから次の操作ができます.      ibatisのselectKeyを使うと、sequenceの値が得られ、値が戻ってきます.しかし、データベースによって操作方法が違います.      oracleに対して:                 insert into user          (id,name,password)          values          (#id#,#name#,#password#)              この文が実行された後、伝達されたパラメータUserオブジェクトDO内のidフィールドにsequenceの値が割り当てられます.     mysqlに対して                    selectKeyをinsertの後に置いて、ラストを通します.INSERT_ID()は挿入されたばかりの自動成長のidの値を得ます.
<insert id="addMetaReport" parameterClass="metaRpo">
  <![CDATA[
   insert IGNORE into rpo_trackingMeta(trackingMeta_id, trackingMeta_title, company_id, subCompany_id, meta_type,
   delegation_at, report_cycle, start_at, end_at, matched_num_new, matched_num_takeoff, matched_num_total,
   created_at, created_by, updated_at, updated_by)
   select   #trackingMetaId#
     , #metaTitle#
     , #companyId#
     , #subCompanyId#
     , #metaType#
     , #delegationAt#
     , #reportCycle#
     , #startAt#
     , #endAt#
     , sum(case when created_at >= #startAt# and created_at < #endAt# then 1 else 0 end)
     , 0
     , count(*)
     , now()
     , #createdBy#
     , now()
     , #updatedBy#
    from matchedPage where task_id = #orderId#
    and verification = 'mediadna';
     ]]>
    <selectKey keyProperty="id" resultClass="int">
   SELECT IF(row_count() > 0, last_insert_id(), 0) AS id FROM dual
  </selectKey>
 </insert>