XML映射中关于主键自增长的两种映射方法

首先我们来看一下,这是一个普通的插入数据的演示
xml映射文件

    <!--插入员工信息,自设id-->
    <insert id="insertStaff" parameterType="Staff">
        insert into staff(sid,sname,sex,phone,hireDate,flag) values(#{sid},#{sname},#{sex},#{phone},#{hireDate},#{flag})
    </insert>

测试方法

@Test
public void insertStaffTest() throws ParseException {
    Staff staff = new Staff();
    staff.setSid(13);
    staff.setSname("麦克斯");
    staff.setSex(1);
    staff.setPhone("18844465752");
    staff.setHireDate(new SimpleDateFormat("yyyy-MM-dd").parse("2021-01-08"));
    staff.setFlag(2);
    int result = sqlSession.delete("insertStaff",staff);
    System.out.println(result+"---"+staff);
}

结果如下
在这里插入图片描述

可以看到,这个时候,可以正常的插入数据。但是如果我们的sid是自增长的主键,我们不想人为设置呢?

    <insert id="insertStaffKey2" parameterType="Staff">
        insert into staff(sname,sex,phone,hireDate,flag) values(#{sname},#{sex},#{phone},#{hireDate},#{flag})
    </insert>

同时我们也将测试方法中的staff.setSid(13);删除,结果如下
在这里插入图片描述
我们可以看到,此时的sid值为零
但是数据库中出现了sid值为26的自增长过后的值
在这里插入图片描述

对于这种情况一般有两种解决办法:
方法一:我们通过使用order属性搭配selectKey 来获取自增长后的sid值

    <!-- 插入员工信息,使用自增id  会获取到主键值映射给staff对象,order可以设置为AFTER或者BEFORE,我们通常设置为AFTER,这样会在生成主键后获取主键  -->
    <insert id="insertStaffKey" parameterType="Staff">
        <selectKey keyColumn="sid" keyProperty="sid" resultType="int" order="AFTER">
            select last_insert_id()
        </selectKey>
        insert into staff(sname,sex,phone,hireDate,flag) values(#{sname},#{sex},#{phone},#{hireDate},#{flag})
    </insert>

结果如下
在这里插入图片描述

方法二:
我们通过useGeneratedKeys属性和keyProperty属性来实现

<insert id="insertStaffKey2" parameterType="Staff" useGeneratedKeys="true" keyProperty="sid">
    insert into staff(sname,sex,phone,hireDate,flag) values(#{sname},#{sex},#{phone},#{hireDate},#{flag})
</insert>

结果如下
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值