mybatis插入数据获取返回mysql自增主键

此类教程在网上已经有很多,这篇博客主要讲采坑,附带提一下方法。

方法:

假设mysql存在表user,其字段及内容如下:

user_iduser_name
1a
2b

与其对应的实体类:

@Getter
@Setter
@ToString
public class User {
    
    Integer user_id;

    String user_name;

}

mapper层的接口:

@Mapper
public interface UserMapper {

    /**
     * 创建User
     * @param user
     * @return
     */
    int createUser(User user);
}

接口映射的xml:

<!--  创建user  -->
<insert id="createUser" parameterType="top.jngcs.test.entity.User">
    insert into user (user_name) values (#{user_name})
    <selectKey resultType="integer" keyProperty="user_id" order="AFTER">
        select LAST_INSERT_ID()
    </selectKey>
</insert>

注意事项

之前作业项目需要获取插入数据后的自增主键时,我都采用的上述方式。这次作业的项目却翻车了,原因主要有三个:

  1. 要获取自增主键,接口映射的xml传参需要用实体类来承接mybatis插入后返回的数据。<selectKey>标签中属性keyProperty就是主键的字段名。如果你没有传入一个类,或者keyProperty写错,mybatis都无法帮你绑定数据。
  2. 如果数据库中使用的下划线命名,而java中用的驼峰命名,注意配置mybatis的命名转换,且不要写错类中对应mysql表的参数。
  3. <insert>标签返回值是插入的个数,这里执行一次插入,如果成功,返回值是1,不要直接拿这个返回值当做自增主键值,否则一直返回的1,要通过实体类中的get方法获取自增主键值。我就是犯的第三个错误,写了个测试类调了半天。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值