我是新手到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字段是自动递增和记录中正确插入。
该ID被注入的对象:
int num_of_record_inserted = fileAttachmentMapper.insertSelective(fileAttachment);
int id = fileAttachment.getId();
什么selectKey
确实是设置在要插入对象的ID,在这种情况下fileAttachment
在其属性id
和记录被插入了。
你只需要使用
<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的基准内的所有返回值。
事实上,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。
我希望这会帮助你。
我认为,正在返回的1指的是更新/插入记录的数量。 我认为ID设置上,你传递给调用insertSelective的FileAttachment的参数。
我希望在作家,你可以有一个定制的复合作家在那里你可以得到插入IDS。
(1)添加到如炬的回答,在INSERT语句中,你需要定义属性useGeneratedKeys = TRUE,参数类型=“对象”,keyProperty =“OBJECTID”和keyColumn =“OBJECTID”应以相同的主键列名(设置OBJECTID )从存储对象记录表。 主键列(的ObjectID)应该被设置在的数据库表AUTO_INCREMENT。
(2)当插入语句被触发新生成的主密钥(OBJECTID)将被存储在对象,和u可以通过使用此方法(object.getObjectId()或object.objectId)访问的ObjectID属性检索它。 现在,这应该给出确切的和新产生的一次。 它的工作对我来说....
配置需要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字段自动更新