### Mapper(Oracle)
<insert id="insertWxshLogOut" parameterType="java.util.HashMap">
<selectKey resultType="java.lang.String" order="BEFORE" keyProperty="id">
select sys_guid() as id from dual
</selectKey>
INSERT INTO WXSH_LOG_OUT
(ID,<!--主键ID需要写在insert语句中,否则会遇到坑-->
OUT_NO,
USER_ID,
FILE_NAME,
CREATE_AT,
IP,
CONTENT,
OUT_NUM,
UNIT_NO,
STATUS)
VALUES
(#{id},<!--主键ID需要写在insert语句中,否则会遇到坑-->
#{out_no},
#{user_id},
#{file_name},
SYSDATE,
#{ip},
#{content},
#{out_num},
#{unit_no},
#{status})
</insert>
标红的ID,可以不写在insert语句中,也可以插入成功.但是会有坑.
此坑的结果是,当你在一个事务中插入学生表和学生课程表.
首先插入学生表,拿到学生的主键后,进行插入学生课程表.
在程序进行时,此时,例如学生主键为1,学生课程表的studentId设置为1
当程度执行完成后,到数据库查看数据,学生表主键变为2,而学生课程表的studentId则还是1.
因此,最妥的写法,还是把主键写到insert语句中.