一般而言,网上和官方文档上都是推荐这样做:
<insert id="insertAuthor" useGeneratedKeys="true" keyProperty="id">
insert into Author (username,password,email,bio) values (#{username},#{password},#{email},#{bio})
</insert>
或者
<insert id="insertKPRecord" parameterType="org.krt.order.entity.Kprecord" >
<selectKey resultType="java.lang.Integer" order="AFTER" keyProperty="id">
SELECT LAST_INSERT_ID() AS ID
</selectKey>
insert into t_kprecord(kpcode,kpdate,jxsid,kpname,spid,spamount,spunit,kptype,purpose)
values(#{kpcode},NOW(),#{jxsid},#{kpname},#{spid},#{spamount},#{spunit},#{kptype},#{purpose})
</insert>
而我在测试的时候,给Mapper接口添加了一个注解@Param,用以给传入参数定义名字,所以要在keyProperty中使用 参数解析表达式,如下红色标记部分
底层原因可能要去看看Mybatis 内部的TypeHandler源码
<mapper namespace="com.mao.spring.rest.mybatis.mapper.BlogMapper">
<insert id="addBlog" parameterType="blog" useGeneratedKeys="true"
keyProperty="blog.id" keyColumn="id">
<!-- <selectKey keyColumn="id" keyProperty="blog.id" order="AFTER" resultType="_int">
SELECT LAST_INSERT_ID() AS id </selectKey> -->
INSERT
INTO
BLOG(username,title,content)
VALUES
(#{blog.username},#{blog.title},#{blog.content})
</insert>