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

概要

开发过程中我们经常性的会用到许多的中间表,mybatis插入数据后返回自增主键的两种方式,

用于数据之间的对应和关联,这个时候我们关联最多的就是ID,我们在一张表中插入数据后级联增加到关联表中,我们数值的mybatis在插入数据后返回的是插入成功的条数,那么这个时候我们想要得到相应的新增数据的ID,该怎么办呢?下面我们介绍二种方式来实现,一种是在xml文件种设置属性,另外一种就是使用注解来实现。

整体两种方法流程

1.使用注解@SelectKey,继承原生的方法insert来实现

这种方法是使用注解,不使用xml方法,使用继承原生的方法insert来实现,在注解里面写号SQL以及每个字段绑定的变量即可。注解的方法为

@Override
        @Insert(" INSERT INTO `air_quality_index` (`districtId`, `monitorTime`, `Pm10`,`Pm25`,`monitoringStation`) VALUES (#{districtId}, NOW(), #{Pm10},#{Pm25},#{monitoringStation}))
@SelectKey(statement="select currval('air_quality_index_id_seq')"),keyProperty = "id",before=false,resultType = Long.class)
int insert(User user);

@SelectKey(statement="select currval('air_quality_index_id_seq')"),keyProperty = "id",before=false,resultType = Long.class),其中select currval('air_quality_index_id_seq')")就是pgsql插入后返回的自增id,这种方式需要把数据库表的id设置成自增ID,这样注解就生效了

在使用的时候直接用

result = 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。

2.在xml中定义useGeneratedKeys为true,返回主键id的值,keyProperty和keyColum分别代表

数据库记录主键字段和java对象成员属性名:在XML文件中要设置userGeneratedKeys="true" keyProperty="id"

 
@Insert(" INSERT INTO `air_quality_index` (`districtId`, `monitorTime`, `Pm10`,`Pm25`,`monitoringStation`) VALUES (#{districtId}, NOW(), #{Pm10},#{Pm25},#{monitoringStation}))

你可能感兴趣的:(面试题总结,mybatis)