mybatis插入数据后返回自增主键ID的2种方式

2年前 (2022) 程序员胖胖胖虎阿
180 0 0

开发过程中我们经常性的会用到许多的中间表,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已经上生成:

mybatis插入数据后返回自增主键ID的2种方式

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);

让我们来看看结果:

mybatis插入数据后返回自增主键ID的2种方式

 最后也得到了这个 自增的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。

版权声明:程序员胖胖胖虎阿 发表于 2022年10月9日 上午7:32。
转载请注明:mybatis插入数据后返回自增主键ID的2种方式 | 胖虎的工具箱-编程导航

相关文章

暂无评论

暂无评论...