美文网首页
Mybatis在insert时返回主键id

Mybatis在insert时返回主键id

作者: 原始人y | 来源:发表于2021-01-18 15:31 被阅读0次

之前做的下面这种设置,总是返回1,干脆放弃了

<selectKey resultType="java.lang.Integer" order="AFTER" keyProperty="rciId">
  SELECT LAST_INSERT_ID()
</selectKey>

换种做法,在xml中做设置

<insert id="insertSelective" useGeneratedKeys="true" parameterType="com.unicom.entity.RoomCheckInfo" keyProperty="rciId" keyColumn="rci_id">

需要注意的地方:
1、添加记录能够返回主键的关键点在于需要在标签中添加以下三个属性。

useGeneratedKeys:必须设置为true,否则无法获取到主键id。
keyProperty:设置为POJO对象的主键id属性名称。
keyColumn:设置为数据库记录的主键id字段名称

2、新添加主键id并不是在执行添加操作时直接返回的,而是在执行添加操作之后将新添加记录的主键id字段设置为POJO对象的主键id属性
调用时:

roomCheckInfoMapper.insertSelective(roomCheckInfo);
int rciId = roomCheckInfo.getRciId();
System.out.println("插入返回的主键为"+roomCheckInfo.getRciId());

成功!!!

其中mapper.java 代码如下:

int saveFull(@Param("messageEn") MessageEn messageEn);

mapper.xml 代码如下

    <insert id="saveFull" useGeneratedKeys="true" keyProperty="msgId" keyColumn="msg_id" parameterType="org.jeecg.modules.system.entity.IMentity.MessageEn">
        insert into message (msg_type, send_type, nick_name, is_group, msg_text, from_text_deleate, from_user_id, to_text_deleate, to_user_id, room_id, receive_time
      )
    values (#{messageEn.msgType,jdbcType=INTEGER},
    #{messageEn.sendType,jdbcType=INTEGER},
    #{messageEn.nickName,jdbcType=VARCHAR},
    #{messageEn.isGroup,jdbcType=INTEGER},
    #{messageEn.msgText,jdbcType=VARCHAR},
    #{messageEn.fromTextDeleate,jdbcType=INTEGER},
    #{messageEn.fromUserId,jdbcType=VARCHAR},
    #{messageEn.toTextDeleate,jdbcType=INTEGER},
    #{messageEn.toUserId,jdbcType=VARCHAR},
    #{messageEn.roomId,jdbcType=INTEGER},
     #{messageEn.receiveTime,jdbcType=TIMESTAMP}
      )
    </insert>

1、其中values 字段是 【实体类】.【实体类属性字段】
2、insert into message(这里面的字段对应数据库字段。

相关文章

网友评论

      本文标题:Mybatis在insert时返回主键id

      本文链接:https://www.haomeiwen.com/subject/nqdxzktx.html