开发过程中我们经常性的会用到许多的中间表,mybatis插入数据后返回自增主键ID的2种方式,用于数据之间的对应和关联.这个时候我们关联最多的就是ID,我们在一张表中插入数据后级联增加到关联表中.我们熟知的mybatis在插入数据后返回的是插入成功的条数,那么这个时候我们想要得到相应的这条新增数据的ID,该怎么办呢?下面我们介绍二种方式来实现,一种是在xml文件中设置属性,另外一种就是使用注解来实现,下面我们来看看。
1.在xml中定义useGeneratedKeys为true,返回主键id的值,keyProperty和keyColumn分别代表数据库记录主键字段和java对象成员属性名
在映射器中配置获取记录主键值xml映射:在xml中定义useGeneratedKeys为true,返回主键id的值,keyProperty和keyColumn分别代表数据库记录主键字段和java对象成员属性名:在XML 文件中要设置 useGeneratedKeys=
"true"
keyProperty=
"id"
<insert id="insertUser" useGeneratedKeys="true" keyProperty="id">
INSERT INTO app_user (create_time, name, avatarUrl, username, sex, id_number, score。。。。。。。。。)
VALUES (#{createTime}, #{name}, #{avatarUrl}, #{username}, #{sex}, #{id_number}, #{score}。。。。。。。。。)
</insert>
在使用的时候直接用
reslut = getBaseMapper().insertUser(user);
这个时候,可以看到自增ID已经上生成:
2.在注解是使用SelectKey,继承原生的方法insert来实现
第二种方法 是使用注解,不使用xml文件,使用继承原生的方法insert来实现,在注解里面喜好sql以及每个字段绑定的变量 即可。注解的方法为:
@SelectKey(statement="select currval('app_user_id_seq')",keyProperty = "id",before = false,resultType = Long.class) ,其中select currval('app_user_id_seq')就是pgsql插入后返回的自增id,这种方式需要把数据库表的id设置成自增ID,这样注解就生效了。
@Override
@Insert("INSERT INTO app_user (create_time, name, avatar, username, sex, id_number, score 。。。。。。) VALUES (#{createTime}, #{name}, #{avatar}, #{username}, #{sex}, #{id_number}, #{score } 。。。。。。")
@SelectKey(statement="select currval('app_user_id_seq')",keyProperty = "id",before = false,resultType = Long.class)
int insert(User user);
在使用的时候直接用
reslut = getBaseMapper().insert(user);
让我们来看看结果:
最后也得到了这个 自增的ID,当然了,我这个用的是pgsql,如果是mysql,在执行select LAST_INSERT_ID()得到的结果那么注解就得改一下:
@SelectKey(statement="select LAST_INSERT_ID()",keyProperty = "id",before = false,resultType = Long.class), 其中select LAST_INSERT_ID()就是mysql插入数据后,获取的当前的自增id。