1. @SelectKey的作用 @SelectKey注解在MyBatis-Plus中的作用是执行一个SQL查询语句,用于在插入或更新操作后获取特定的值,通常用于获取自动生成的主键值。这个注解可以灵活地与@Insert或@Update注解一起使用,确保在数据操作后能够立即获取到所需的值。 2. 使用场景 @SelectKey通常用于以下场景: 在插入数据后获取自动生...
@SelectKey是MyBatis中的注解之一,用于在执行INSERT语句后获取自动生成的主键值。该注解可以用于接口方法或XML文件中,通常与@Insert注解一起使用。使用@SelectKey注解时,需要指定生成主键的SQL语句和将主键值赋给Java对象的哪个属性 试例: @Insert("INSERT INTO users(name, age) VALUES(#{name}, #{age})")@Selec...
可以看到,也成功获取了保存以后的主键。 由上面小案例可以看到,使用selectKey标签需要执行2条sql,而之前使用useGeneratedKeys、keyProperty的方式,只需要执行一个sql就可以了,因此selectKey标签效率更低;而且selectKey标签是不支持获取批量插入的记录id的,所以推荐使用useGeneratedKeys、keyProperty的方式来获取自增主键。
1)使用selectKey的方式获取主键,相当于调用了MySql的LAST_INSERT_ID()函数,意思是查询最后一次插入的ID,相当于执行了两条语句 2)两种方式的主键获取方式都是通过MyBatis为我们自动将id值赋值给传入的javaBean,而不是通过update语句返回,也就是update返回的同jdbc一致(影响的行数),获取id的方式是执行完update后调用use...
order属性,取值范围BEFORE|AFTER,指定是在insert语句前还是后执行selectKey操作。AFTER一般用于Mysql自增的情况下,BEFORE一般用于自定义的ID的获取。 keyProperty属性,默认值unset,用于设置getGeneratedKeys方法或selectKey子元素返回值将赋值到领域模型的哪个属性中,也就是你实体类中,对应数据库的主键id。
<selectKey keyColumn="id" keyProperty="id" resultType="int" order="BEFORE"> select XXX.nextval from dual </selectKey> 这是不是很熟悉,就是我们学MyBatis时候学的啊,MyBatis-Plus只不过是把它变成了@KeySequence注解,省去了你写这段xml了而已,而所有问题的源头就来自于这段xml,潘老师亲自测试,在insert...
order属性,取值范围BEFORE|AFTER,指定是在insert语句前还是后执行selectKey操作。AFTER一般用于Mysql自增的情况下,BEFORE一般用于自定义的ID的获取。 keyProperty属性,默认值unset,用于设置getGeneratedKeys方法或selectKey子元素返回值将赋值到领域模型的哪个属性中,也就是你实体类中,对应数据库的主键id。
-- --><selectKeykeyProperty="id"order="AFTER"resultType="java.lang.Long">SELECT LAST_INSERT_ID()</selectKey>insert into ${table.name} ( #foreach($field in ${table.fields}) #if(!${field.keyFlag})##生成普通字段 ${field.name}#if($foreach.hasNext),#end...
1)select⽅式 <insert id="insert" parameterType="com.xx.entity.Dept"> <selectKey resultType="int" keyProperty="deptno" keyColumn="deptno" order="AFTER"> select last_insert_id()</selectKey> insert into dept(deptname,loc) values(#{deptname},#{loc})</insert> 2)配制⽅式 <insert id=...
5)最后一种,回归本源,使用原生的MyBatis的SqlSession中使用Batch模式吧,别使用selectKey就行 总结 其实,当你选择了一种框架,在享受它带来的便利时,也要能承受它给你带来的不利,我们需要做的只是在利弊中取舍,尽可能扬长避短,趋利避害,除非你自己开发个更优秀的框架,那也是贼好的!