Mybatis-Plus插入后返回元素ID

1.mybatis原生

很多时候,在向数据库插入数据时,需要保留插入数据的 id,以便进行后续的 update 操作或者将 id 存入其他表作为外键。但在默认情况下,insert 操作返回的是一个 int 值,并不是表示主键 id,而是表示当前 SQL 语句影响的行数。

mybaits-plus要使用mybatis原生需要一下配置,指定下mapper文件的位置就好

mybatis-plus:
  mapper-locations: classpath*:mapperxml/*Mapper.xml

直接先看mapper.xml文件,这个insert语句实际上就是插入MouldMessage这个我定义的实体类。

<mapper namespace="com.xxx.MessageMouldMapper">
    <insert id="testInsert" useGeneratedKeys="true" keyProperty="id">
        INSERT INTO t_XXXX
        XXXXXX,XXXX,XXXXX
        VALUES XXXX,XXXX,XXXX
    </insert>
</mapper>
  • keyProperty:表示返回的 id 要保存到对象的哪个属性中,仅适用于 insert 和 update 语句
  • useGeneratedKeys:表示主键 id 为自增长模式,默认是 false,仅适用于 insert 和 update 语句

userGenerateKeys告诉mybatis使用自增主键,keyProperty指定这个主键名称叫id。
然后再mapper接口定义这个方法

Long testInsert(MessageMould messageMould);

调用这个插入语句,information这个实例时没有定义id,创建时间这些字段的,输出结果是数据表修改条数,这里插入一条,所以返回1。

System.out.println(messageMouldMapper.testInsert(information)+----);

然后这时候我们输出下information的一些属性,发现本来作为参数的information被mybatis自动填充上了id和创建时间

System.out.println(information.getId()+*******+information.getCreateTime());

所以结论就是,插入之后找传入的参数,就能找到新增加元素的id

2.使用mybatis-plus注解

其实跟原生mybatis一样,插入后元素的id会直接映射到参数中,只不过用注解代替了mapper.xml文件

@Insert(value = "INSERT INTO t_XXXX" +
        "XXX,XXX,XXX " +
        "VALUES (XXX,XXX,XXX)")
@SelectKey(statement="select LAST_INSERT_ID()",keyProperty = "id",before = false,resultType = Long.class)
Integer testInsert1(MessageMould messageMould);

执行完这条insert操作后,直接拿形参messageMould的id,就能拿到id

3.使用mybatis-plus提供的insert

mybatis只要extends BaseMapper就可以调用他的insert方法。其实也就跟上面2个一样。i调用insert(MessageMould messageMould)后,id会映射到形参messageMould中,直接拿形参messageMould的id,就能拿到id

你可能感兴趣的:(Java,Spring,Boot,mybatis,java,mysql)