插入记录后返回自增主键id
mapping文件的insert标签中加入如下标签,指明主键名(keyProperty),执行方式(order)为新增完再返回执行,因为只有插入完成后获取的id才是最新的,返回值是Integer类型,也就是新增后返回的自增主键id。
<selectKey keyProperty="id" order="AFTER" resultType="java.lang.Integer">
SELECT LAST_INSERT_ID()
</selectKey>
这里不用担心并发导致的获取id不一致的问题,LAST_INSERT_ID()方法是原子性的,每个客户端的连接都是隔离的,无需加锁。
注意事项
- 如果你的mapping是mybatis generator自动生成的,无论你的主键是否自增,都会默认加上主键字段进行插入,如果需要返回自增主键,插入语句中则无需加入主键。
- 在加入上面语句时,不需要在insert标签后加上**useGeneratedKeys=“true” keyProperty=“id”**字段,否则会报主键重复的sql异常。
-
返回主键并不是insert这个方法的返回值,插入方法返回的值还是1或者0,代表成功或者失败,这仅仅是对我们传入需要插入对象的id进行一个赋值,通过后台传入对象的getId()方法直接获取就行。