Mybatis使用generatedKey在插入数据时返回自增id始终为1,自增id实际返回到原对象当中的问题排查
2018-09-08 00:24
645 查看
今天在使用数据库的时候,遇到一个场景,即在插入数据完成后需要返回此数据对应的自增主键id,但是在使用Mybatis中的generatedKey且确认各项配置均正确无误的情况下,每次插入成功后,返回的都是1,而不是最新的自增Id。
终于凭借着一次Debugg发现的问题,原来在使用Mabatis中的insert或者insertSelective方式插入时,如使用int insert(TestGenKey testGenKey)时,返回值int表示的是插入操作受影响的行数,而不是指的自增长id,那么返回的自增id到底去哪里了呢?通过下面的Debugg我们知道自增id返回到testGenKey的原对象中去了。
举例示范配置
数据库示例表
generator的配置文件
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE generatorConfiguration PUBLIC "-//mybatis.org//DTD MyBatis Generator Configuration 1.0//EN" "http://mybatis.org/dtd/mybatis-generator-config_1_0.dtd"> <generatorConfiguration> <!-- http://www.mybatis.org/generator/configreference/context.html --> <context id="product" targetRuntime="MyBatis3" defaultModelType="flat"> <property name="autoDelimitKeywords" value="true"/> <property name="beginningDelimiter" value="`"/> <property name="endingDelimiter" value="`"/> <plugin type="tk.mybatis.mapper.generator.MapperPlugin"> <property name="mappers" value="tk.mybatis.mapper.common.Mapper"/> <property name="caseSensitive" value="true"/> </plugin> <!-- 阻止生成自动注释 --> <commentGenerator> <property name="javaFileEncoding" value="UTF-8"/> <property name="suppressDate" value="true"/> <!-- 注释不能全干掉,不然每次xml文件都有重复内容 --> <property name="suppressAllComments" value="false"/> </commentGenerator> <!--数据库链接地址账号密码--> <jdbcConnection driverClass="com.mysql.jdbc.Driver" connectionURL="jdbc:youraddress" userId="yourname" password="yourpass"> </jdbcConnection> <!--生成Model类存放位置--> <javaModelGenerator targetPackage="yourpackage.model" targetProject="src/main/java"> <property name="enableSubPackages" value="true"/> <property name="trimStrings" value="true"/> </javaModelGenerator> <!--生成映射文件(xml)存放位置--> <sqlMapGenerator targetPackage="yourpackage.dao" targetProject="src/main/resources"> <property name="enableSubPackages" value="true"/> </sqlMapGenerator> <!--生成Dao类存放位置--> <javaClientGenerator type="XMLMAPPER" targetPackage="yourpackage.dao" targetProject="src/main/java"> <property name="enableSubPackages" value="true"/> </javaClientGenerator> <table tableName="test_gen_key" domainObjectName="TestGenKey" enableCountByExample="false" enableUpdateByExample="false" enableDeleteByExample="false" enableSelectByExample="false" selectByExampleQueryId="false"> <generatedKey column="product_id" sqlStatement="JDBC" identity="true"/> </table> </context> </generatorConfiguration>
给需要获取自增长id的表配置generatedKey
依据上述配置生成出来的PO Model如下
package yourpackage.model; import javax.persistence.*; @Table(name = "test_gen_key") public class TestGenKey { @Id @Column(name = "product_id") @GeneratedValue(generator = "JDBC") private Integer productId; private String name; private String sex; /** * @return product_id */ public Integer getProductId() { return productId; } /** * @param productId */ public void setProductId(Integer productId) { this.productId = productId; } /** * @return name */ public String getName() { return name; } /** * @param name */ public void setName(String name) { this.name = name == null ? null : name.trim(); } /** * @return sex */ public String getSex() { return sex; } /** * @param sex */ public void setSex(String sex) { this.sex = sex == null ? null : sex.trim(); } }
测试及Debugg
编写测试方法测试插入
插入成功后观察对应的变量对应的值
总结:调用Insert后插入操作之后,所得到自增长Id被赋值到原对象当中,而不是返回值!
相关文章推荐
- 在基于Mybatis持久层框架,使用数据库事务时,插入一条数据后,无法返回主键ID的问题研究
- 使用Mybatis时,在插入一条数据记录返回主键id值
- 关于mybatis 使用case when 计算BigDecimal 数据返回对象的问题
- mybatis mysql 插入对象返回数据主键id
- mysql+mybatis插入一条数据后返回主键ID
- mysql java使用PreparedStatement插入数据并返回id的代码
- Mybatis配置插入数据返回主键ID
- iBatis下插入数据返回数据ID的问题
- Mysql插入数据返回对应的自增id(mybatis)
- mybatis 插入数据返回主键id
- mybatis插入数据返回当前插入数据的id
- mybatis报错:当要返回刚刚插入数据的id时
- mybatis 插入数据返回ID
- MyBatis插入数据 返回插入的主键ID
- mybatis做insert操作的时候 怎么才能返回插入的那条数据的id?
- 使用SQLServer2005插入一条数据时返回当前插入数据的ID
- iBatis下插入数据返回数据ID的问题
- 使用mybatis, 如何获取刚插入数据的id
- 如何使用myBatis在数据库中插入数据并返回主键
- Mybatis_插入数据后返回主键ID_返回数据字段与类中字段相对应