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


        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})
    

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 nonFlightApplyDetailList){
        Integer num = applyInfoDao.addApplyInfo(applyInfo);
        Integer applyId = applyInfo.getId();
        applyInfoDao.updateByPrimaryKeySelective(applyInfo);
        }

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

你可能感兴趣的:(#,Mybatis,Mysql)