MyBatis插入数据后返回自增主键

场景介绍

开发过程中,我们经常性的会用到许多的中间表,用于数据之间的对应和关联。这个时候我们关联最多的就是ID,在一张表中插入数据后级联增加到关联表中。我们熟知的MyBatis在插入数据后返回的是插入成功的条数,那么这个时候我们想要得到相应的这条新增数据的ID,该怎么办呢?

例如:用户和角色的对应关系,在新增一个用户的时候就给他分配一个默认的角色。此时,需要先增加用户,获取新增完返回的用户id;然后根据角色id,一起插入到对应的用户角色表中(sys_user_role)。

编码实现

一、通过XML的形式,获取自增主键
<insert id="insert" parameterType="com.xxx.xxx.model.User" useGeneratedKeys="true" keyProperty="id"  keyColumn="id">
    INSERT INTO
        sys_user(login_name, password, salt, del_flag)
    VALUES(
        #{loginName,jdbcType=VARCHAR},
        #{password,jdbcType=VARCHAR},
        #{salt,jdbcType=VARCHAR},
        #{delFlag,jdbcType=TINYINT}
    )
</insert>

useGeneratedKeys为true,表示返回主键id的值。
keyProperty代表数据库中主键字段名。
keyColumn代表Java对象的成员属性名。

二、通过接口注解方式
// 返回主键字段id值
@Options(useGeneratedKeys = true, keyProperty = "id", keyColumn = "id")
@Insert("INSTER INTO sys_user (login_name, password, salt, del_flag) VALUES(#{loginName}, #{password}, #{salt}, #{delFlag})")
void insert(User user);

通过注解@Options分别设置参数useGeneratedKeys,keyProperty,keyColumn值

注意事项

在MyBatis中添加操作返回的是记录数并非记录主键id。因此,如果需要获取新添加记录的主键值,需要在执行添加操作之后,通过Java对象的xxx.getId()方法获取即可。

int row = userMapper.insert(user);
// 返回影响的行数
System.out.println("row = " + row); 
// 通过Java对象获取主键属性值
System.out.println("id = " + user.getId()); 

扩展

如果是批量添加用户,那该如何获取主键呢?同样,可以使用XML的方法进行映射。

<insert id="insert" parameterType="com.xxx.xxx.model.User" useGeneratedKeys="true" keyProperty="id"  keyColumn="id">
    INSERT INTO
        sys_user(login_name, password, salt, del_flag)
    VALUES
    <foreach collection="list" separator="," item="item">
            (
                #{item.loginName,jdbcType=VARCHAR},
                #{item.password,jdbcType=VARCHAR},
                #{item.salt,jdbcType=VARCHAR},
                #{item.delFlag,jdbcType=TINYINT}
            )
	</foreach>
</insert>
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值