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/
