前言
有时候在开发过程中,需要将数据insert到数据库中,并且需要获取到数据的主键id,对于oracle数据库来说,主键是通过序列用.nextval生成的,今天记录一下mybatis是怎么返回主键的。
具体代码
例子为将一条教师信息插入到数据库teacher表中,传入的参数为Teacher实体bean。
<insert id="addTeacher" parameterType="com.mycompany.entity.Teacher">
<selectKey resultType="java.lang.Long" order="BEFORE" keyProperty="id">
SELECT teacher_s.nextval FROM dual
</selectKey>
insert into teacher(
ID,
NAME,
DESCRIPTION,
AGE,
SEX,
REMARK
)
values(
#{id},
#{name},
#{description},
#{age},
#{sex},
#{remark}
)
</insert>
可以看到在insert之前先用<selectKey>
标签查询到序列,这时便将id保存到实体bean Teacher中了,之后再将包含id的实体bean插入到teacher表中。所以事实上我们获取id的方式并不是通过mybatis返回值获取的(返回值依旧是插入成功条数),而是通过mybatis将id保存到实体bean中,通过执行完插入操作后用实体bean方法int id = teacher.getId()
获取id。
注意
以上的方法适用于支持序列的数据库,例如oracle,对于MySQL是另一种写法,以后写吧。