获取MyBatis的最后插入记录的ID(Get the id of last inserted re

2019-06-27 08:22发布

我是新手到MyBatis的。 我想获得最后插入记录的ID。 我的数据库是MySQL和我的XML映射为

  <insert id="insertSelective"  parameterType="com.mycom.myproject.db.mybatis.model.FileAttachment" >
  <selectKey resultType="java.lang.Long" keyProperty="id" order="AFTER" >
  SELECT LAST_INSERT_ID() as id
</selectKey>
 insert into fileAttachment
<trim prefix="(" suffix=")" suffixOverrides="," >
  <if test="name != null" >
    name,
  </if>
  <if test="attachmentFileSize != null" >
    size,
  </if>      
</trim>
<trim prefix="values (" suffix=")" suffixOverrides="," >
  <if test="name != null" >
    #{name,jdbcType=VARCHAR},
  </if>
 <if test="attachmentFileSize != null" >
    #{attachmentFileSize,jdbcType=INTEGER},
  </if>
 </trim>
 </insert>

我想在这里书面声明“SELECT LAST_INSERT_ID()为ID”应该返回最后插入记录的ID,但我在插入记录后总是得到1。

我mapper.java类我有方法

   int insertSelective(FileAttachment record);

在我的DAO类我使用

INT ID = fileAttachmentMapper.insertSelective(FileAttachment的);

我得到总是1时插入新记录编号的值。 我的ID字段是自动递增和记录中正确插入。

Answer 1:

该ID被注入的对象:

int num_of_record_inserted = fileAttachmentMapper.insertSelective(fileAttachment);

int id = fileAttachment.getId();

什么selectKey确实是设置在要插入对象的ID,在这种情况下fileAttachment在其属性id和记录被插入了。



Answer 2:

你只需要使用

  <insert id="insert" parameterType="com.mycom.myproject.db.mybatis.model.FileAttachment" useGeneratedKeys="true" keyProperty="id" keyColumn="id"> 

没有必要在MyBatis的执行插入标签中选择查询。 它为您提供了插入operation.Here定义useGeneratedKeys =“真”,keyProperty =“ID”,keyColumn =“ID”。你可以对ID retrive值以下方式新的参数

  FileAttachment fileAttachment=fileAttachmentMapper.insertSelective(fileAttachment);
  Integer id=fileAttachment.getId();

fileAttachment.getId()的使用,因为在插入标签keyColumn =“ID”的定义,你会得到一个FileAttachment的FileAttachment的基准内的所有返回值。



Answer 3:

事实上,MyBatis的已经提供了这个feature.You可以使用的选项:“useGeneratedKeys”得到最后插入的ID。

下面是从MyBatis的解释。(如果您想了解更详细的信息,你可以去官方的MyBatis页)。

useGeneratedKeys(插入和只更新)这告诉MyBatis使用JDBC的getGeneratedKeys方法来检索数据库内部生成的密钥(例如数据库管理系统的自动递增的字段,如MySQL或SQL Server)。 默认值:false

如果您正在使用XML:

<insert id="" parameterType="" useGeneratedKeys="true">

如果您使用的注解:

@Insert("your sql goes here")
@Options(useGeneratedKeys = true, keyProperty = "id", keyColumn = "id")
int insert(FileAttachment fileAttachment) throws Exception;

一旦你完成插入操作中,FileAttachment的的SETID()方法将被调用,并设为最后插入记录的ID。 您可以使用FileAttachment的公司的getId()得到最后插入的ID。

我希望这会帮助你。



Answer 4:

我认为,正在返回的1指的是更新/插入记录的数量。 我认为ID设置上,你传递给调用insertSelective的FileAttachment的参数。



Answer 5:

我希望在作家,你可以有一个定制的复合作家在那里你可以得到插入IDS。



Answer 6:

(1)添加到如炬的回答,在INSERT语句中,你需要定义属性useGeneratedKeys = TRUE,参数类型=“对象”,keyProperty =“OBJECTID”和keyColumn =“OBJECTID”应以相同的主键列名(设置OBJECTID )从存储对象记录表。 主键列(的ObjectID)应该被设置在的数据库表AUTO_INCREMENT。

(2)当插入语句被触发新生成的主密钥(OBJECTID)将被存储在对象,和u可以通过使用此方法(object.getObjectId()或object.objectId)访问的ObjectID属性检索它。 现在,这应该给出确切的和新产生的一次。 它的工作对我来说....



Answer 7:

配置需要codeGenerator:

 <table schema="catalogue" tableName="my_table" >
        <generatedKey column="my_table_id" sqlStatement="JDBC" identity="true" />
        <columnOverride column="my_table_id" isGeneratedAlways="true"/>
    </table>

http://www.mybatis.org/generator/configreference/generatedKey.html

代码生成后插入包括id字段自动更新



文章来源: Get the id of last inserted record in mybatis