I'm inserting some data into an Oracle
table and need to retrieve the id
of the inserted row. Said id
is being generated by a sequence and then inserted to the table by a trigger.
Now, I know there are several ways to get the id of the inserted row when using JDBC
, but since I'm using MyBatis
to execute the INSERT
command, I can't seem to figure out how to obtain the id after inserting my data. Any advice would be greatly appreciated.
Once you finish insert operation, the fileAttachment's setId() method will be invoked, and is set to id of last inserted record. You can use fileAttachment's getId() to get the last insert id.
keyProperty refers to the POJO variable name and keyColumn refers to generated column name in database. By using <selectKey/> inside insert tag.
Something like this should work
class User {
int userId
...
}
<insert id="addUser" useGeneratedKeys="true" keyColumn="user_id" keyProperty="userId">
INSERT INTO user(login, name,...) VALUES(#{login}, #{name},...
</insert>
For me it works like this (mybatis 3)
<insert id="create" parameterType="Project" useGeneratedKeys="true" keyProperty="project.projectId" keyColumn="PROJECT_ID">
INSERT INTO PROJECT (TITLE,DESCRIPTION)
VALUES
(#{title},#{description})
</insert>
No need for selectKey. Just sure to put the correct value in keyProperty.. I have a trigger before insert in oracle to get next id from sequence.
Alternatively this works also:
<insert id="createEmpty" statementType="CALLABLE" parameterType="Panelist">
BEGIN INSERT INTO PANELIST(PANEL_ID) VALUES (#{panelId})
RETURNING PANELIST_ID INTO
#{panelist.panelistId,mode=OUT,jdbcType=INTEGER}; END;
</insert>
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With