Mybatis 返回主键id的实用方法
欢迎关注我的博客。
我们在业务中经常会遇到,执行一个插入sql之后还需要拿到插入后的自增id去做别的事情,这种情况我总结了3种方法。
效果就是你执行完插入语句后,会把自增id自动set到你传入的实体类中。
1.继承BaseMapper<T, P>,这个BaseMapper里有个insertSelective()方法,会自动返回主键id的值。
这个每个公司可能会有自己不同的BaseMapper生成方法,这里就不做说明了。
详细说明参考:https://blog.csdn.net/isea533/article/details/41457529
下面两种方法是比较接地气的,个人推荐使用:
2.用selectKey标签
<insert id="insertPerson" parameterType="com.***.domain.Person">
<selectKey keyProperty="id" resultType="Integer" order="AFTER">
SELECT LAST_INSERT_ID() AS ID
</selectKey>
INSERT INTO `Person`
<trim prefix="(" suffix=")" suffixOverrides=",">
<if test="name!= null">
`name`,
</if>
<if test="sex!= null">
`sex`,
</if>
<if test="className!= null">
`className`,
</if>
</trim>
<trim prefix="values (" suffix=")" suffixOverrides=",">
<if test="name!=null">
#{name},
</if>
<if test="sex!=null">
#{sex},
</if>
<if test="className!=null">
#{className},
</if>
</trim>
</insert>
说明:keyProperty:实体类属性字段
resultType:返回主键的数据类型
order:执行顺序,after表示在执行插入语句之后执行
3.这种方法更简单
<insert id="insertPerson" useGeneratedKeys="true" keyProperty="id" parameterType="com.***.domain.Person" >
insert into person (name,sex,className) values( #{name},#{sex},#{className})
</ insert>
或者:直接用@Options()注解也可以做到。就是在你的mapper.java的方法上边写上这个注解。
@Insert("insert into person (name,sex,className) values(#{name},#{sex},#{className})")
@Options(useGeneratedKeys = true, keyProperty = "id", keyColumn = "id")
void insertPerson(Person person);
说明:useGeneratedKeys:是否使用jdbc的getGenereatedKeys方法获取主键并赋值到keyProperty设置的属性中。
keyProperty:实体类中属性字段名称。
备注:以上仅供参考,个人开发总结。希望对你有帮助,让我们共同进步。
孰能无过,如有错误和疑问欢迎留言。