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の値を得ます.
ibatisを使ってデータをデータベースに挿入する時、いくつかのsequenceのデータを使います.挿入が完了したら、sequenceの値を返してから次の操作ができます. ibatisのselectKeyを使うと、sequenceの値が得られ、値が戻ってきます.しかし、データベースによって操作方法が違います. oracleに対して:
<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>