mybatis+mysql 实现插入后返回自增的id

<insert id="addApplyInfo" useGeneratedKeys="true"  keyProperty="id" parameterType="com.fulan.entity.ApplyInfo" >
        INSERT INTO apply_info (apply_type, apply_org, apply_contact, apply_email, apply_phone
            , start_time, end_time, apply_state, apply_remark, creator_id
            , created_time, last_modifier_id, last_modified_time)
        VALUES (#{applyInfo.applyType}, #{applyInfo.applyOrg}, #{applyInfo.applyContact}, #{applyInfo.applyEmail}, #{applyInfo.applyPhone}
           , #{applyInfo.startTime}, #{applyInfo.endTime}, #{applyInfo.applyState}, #{applyInfo.applyRemark}, #{applyInfo.creatorId}
           , #{applyInfo.createdTime}, #{applyInfo.lastModifierId}, #{applyInfo.lastModifiedTime})
    </insert>

useGeneratedKeys=“true” 表示给主键设置自增长
keyProperty=“id” 表示将自增长后的Id赋值给实体类中的id字段。
parameterType=“com.fulan.entity.ApplyInfo” 这个属性指向传递的参数实体类
这里提醒下, 中没有resultType属性,不要乱加。
实体类中uerId 要有getter() and setter(); 方法,数据库中该表表的主键ID是自增的。
通过插入数据的对象可获得该对象的id.

这里说一下本人的踩坑记录,在网上搜了各种方法,各种尝试

    @Override
    //@Transactional
    public Integer addApplyInfo(ApplyInfo applyInfo,SysUserInfo sysUserInfo,List<NonFlightApplyDetail> nonFlightApplyDetailList){
        Integer num = applyInfoDao.addApplyInfo(applyInfo);
        Integer applyId = applyInfo.getId();
        applyInfoDao.updateByPrimaryKeySelective(applyInfo);
        }

这里的num是插入返回的结果,返回插入了几条,而applyInfo对象get的applyId才是返回的id值。
还有本人为了保证数据的一致性,给这个方法加了@Transactional事务注解,后来才发现是个大坑。因为当你添加了事务的话,同时想获取插入的自增id,为了保证数据一致性,事务是没有提交的,所以获取的apply是null。

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值