MyBatis自動獲取主鍵,MyBatis使用Oracle返回主鍵,Oracle獲取主鍵


MyBatis自動獲取主鍵,MyBatis使用Oracle返回主鍵,Oracle獲取主鍵

 

>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>

蕃薯耀 2016年8月24日 10:39:04 星期三

http://fanshuyao.iteye.com/

 

一、問題描述

 

由於Oracle是不支持自動生成主鍵的,不像Sql或者Mysql能自動生成。

 

 

二、解決方案

 

使用Oracle的序列生成主鍵。

 

1、首先在Oracle數據庫創建序列:

 

create sequence SEQ_T_OPERATION_LOG
minvalue 1
maxvalue 9999999999999999999999999999
start with 1
increment by 1
cache 20;

 

 

2、在Mybatis中使用序列,order必須為"BEFORE" ,keyProperty對應Java實體的主鍵屬性,

SEQ_T_OPERATION_LOG.nextval 為第1步創建的序列

 

<selectKey resultType="java.lang.Long" order="BEFORE" keyProperty="logId">
        SELECT SEQ_T_OPERATION_LOG.nextval AS logId FROM dual
</selectKey>

 

完整示例(一個保存操作):

 

<insert id="save" parameterType="com.chinagas.org.beans.OperationLog" >
  	<selectKey resultType="java.lang.Long" order="BEFORE" keyProperty="logId">
        SELECT SEQ_T_OPERATION_LOG.nextval AS logId FROM dual
	</selectKey>
    insert into T_OPERATION_LOG (LOG_ID, LOG_NAME, LOG_TYPE, 
      TABLE_NAME, TABLE_NAME_VALUE, TABLE_ID, IP_ADDRESS, MAC_ADDRESS, 
      CREATE_BY, CREATE_BY_NAME, CREATE_TIME, 
      MODIFY_BY, MODIFY_BY_NAME, MODIFY_TIME, 
      REMARK, CONTENT_AFTER_OPERATION
      )
    values (#{logId,jdbcType=DECIMAL}, #{logName,jdbcType=VARCHAR}, #{logType,jdbcType=DECIMAL}, 
      #{tableName,jdbcType=VARCHAR}, #{tableNameValue,jdbcType=VARCHAR}, #{tableId,jdbcType=DECIMAL}, #{ipAddress,jdbcType=VARCHAR}, #{macAddress,jdbcType=VARCHAR}, 
      #{createBy,jdbcType=DECIMAL}, #{createByName,jdbcType=VARCHAR}, #{createTime,jdbcType=TIMESTAMP}, 
      #{modifyBy,jdbcType=DECIMAL}, #{modifyByName,jdbcType=VARCHAR}, #{modifyTime,jdbcType=TIMESTAMP}, 
      #{remark,jdbcType=VARCHAR}, #{contentAfterOperation,jdbcType=CLOB}
      )
  </insert>

 

如果數據庫支持自動生成主鍵的,可以參考此文章:

http://fanshuyao.iteye.com/blog/2245853

 

 

(如果你覺得文章對你有幫助,歡迎捐贈,^_^,謝謝!) 

>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>

蕃薯耀 2016年8月24日 10:39:04 星期三

http://fanshuyao.iteye.com/

 


免責聲明!

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



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