参考链接:https://blog.csdn.net/fengkungui/article/details/82772302
https://www.iteye.com/blog/bugyun-2286145
https://blog.csdn.net/weixin_40936211/article/details/90577603
在使用mybatis时,会出现这种需求:
在mybatis的配置文件中,有个叫keyProperty和useGeneratedKeys的属性。useGeneratedKeys 参数只针对 insert 语句生效,默认为 false。当设置为 true 时,表示如果插入的表以自增列为主键,则允许 JDBC 支持自动生成主键,并可将自动生成的主键返回。
当主键是自增的情况下,添加一条记录的同时,其主键是不能使用的,但是有时我们需要该主键,这时我们该如何处理呢?这时我们只需要在其对应xml中加入以下属性即可:
useGeneratedKeys="true" keyProperty="对应的主键的对象"。以确保Notice对象通过mybatis增加到数据库之后得到的id增长值会被设置在Notice对象上。
<!-- 主要是在主键是自增的情况下,添加成功后可以直接使用主键值,其中keyProperty的值是对象的属性值不是数据库表中的字段名-->
<insert id="saveMsg" parameterType="Notice" useGeneratedKeys="true" keyProperty="msgId">
insert into notice(msg_type,title,content,rec_time,send_time,user_id,deleted,viewed)
values(#{msgType,jdbcType=INTEGER},#{title,jdbcType=VARCHAR},#{content,jdbcType=VARCHAR},
#{recTime,jdbcType=BIGINT},#{sendTime,jdbcType=BIGINT},#{userId,jdbcType=VARCHAR},
#{deleted,jdbcType=TINYINT},#{viewed,jdbcType=INTEGER})
</insert>
这样在之后的java代码中我们就可以获取该主键对应的对象的属性值(msgId)。