背景

MyBatis 是支持定制化 SQL、存储过程以及高级映射的优秀的持久层框架。MyBatis 避免了几乎所有的 JDBC 代码和手动设置参数以及获取结果集。MyBatis 可以对配置和原生Map使用简单的 XML 或注解,将接口和 Java 的 POJOs(Plain Old Java Objects,普通的 Java对象)映射成数据库中的记录。

使用传统的代码结构controller-->service-->dao

dao传入实体,int insertEntity(Entity entity),其中entity的id为自增主键

调用service方法返回int的值总是为1。

xml配置

<insert id="insertEntity" parameterType="com.xxxx.dto.Entity " keyColumn="id"
useGeneratedKeys="true" keyProperty="id">

INSERT INTO ...

尝试方案

怀疑配置不生效,使用

<selectKey resultType="Integer" keyProperty="id" order="AFTER">

select @@IDENTITY as id

</selectKey>

仍然不行,再换一种

<selectKey resultType="Integer" keyProperty="id" order="AFTER">
SELECT LAST_INSERT_ID()
</selectKey>

仍然不行。

调试

通过在调用插入操作后,不小心查看了entity的值,发现此时id为自增后的值,瞬间明白了,insert返回的值是受影响的行数,插入后的id放入了entity中,取返回后的id值时,需要从entity中去获取。

总结

返回插入的唯一主键是通过实体Entity获取,而不能通过sql执行后的int或long取,因为xml里面sql执行后返回的值是受影响行数.

错误获取插入的唯一主键的方式:

public Result insertEntity(insertEntity entity) {

Long id= dao.insertEntity(entity);

System.out.println(id);

}

正确获取插入的唯一主键的方式,注意:是entity

public Result insertEntity(insertEntity entity) {

dao.insertEntity(entity);

System.out.println(entity.getId());

}

mybatis返回自增主键踩坑记的更多相关文章

  1. 杜绝网上压根没测过就乱写之 《oracle mybatis 返回自增主键 》

    面试过好多人,包括自己也属于这么一个情况: 遇到问题直接去网上查,一般都可以查到解决方案.其中也包括一些基本的面试资料的答案. 其实有很多答案也都是正确的,但是还是存在一些压根就是胡乱抄来的答案,也不 ...

  2. 转mybatis返回自增主键,亲测

    重点是获取对象的主键值而不是insert的返回值 Mybatis获取插入数据的主键时,返回值总是1xml里的写法 第一种方式 <insert id="insertLogin" ...

  3. mybatis返回自增主键问题踩坑

    1 <insert id="insert" keyProperty="id" useGeneratedKeys="true"
 par ...

  4. Mybatis批量插入返回自增主键(转)

    我们都知道Mybatis在插入单条数据的时候有两种方式返回自增主键: 1.对于支持生成自增主键的数据库:useGenerateKeys和keyProperty. 2.不支持生成自增主键的数据库:< ...

  5. mybatis插入数据后返回自增主键ID详解

    1.场景介绍: ​ 开发过程中我们经常性的会用到许多的中间表,用于数据之间的对应和关联.这个时候我们关联最多的就是ID,我们在一张表中插入数据后级联增加到关联表中.我们熟知的mybatis在插入数据后 ...

  6. Mybatis:插入数据返回自增主键

    使用Mybatis作为工具连接MySQL,要求在插入数据之后返回自增主键 一开始也很迷惑,Mybatis使用insert之后,成功返回的是1,失败会报错或返回0,主键去哪找来 后来知道Mybatis可 ...

  7. Spring中新建记录后返回自增主键的处理方法

    接手一个旧系统改造的过程,要插入后立即返回自增值,不能重构guid类型主键,Spring提供了很优美的机制. Spring利用GeneratedKeyHolder,提供了一个可以返回新增记录对应主键值 ...

  8. 关于mybatis用mysql时,插入返回自增主键的问题

    公司决定新项目用mybatis,虽然这个以前学过但是一直没用过都忘得差不多了,而且项目比较紧,也没时间去系统点的学一学,只好很粗略的百度达到能用的程度就行了. 其中涉及到插入实体要求返回主键id的问题 ...

  9. Mybatis插入数据返回自增主键

    方法有很多,参考 mysql函数之六:mysql插入数据后返回自增ID的方法,last_insert_id(),selectkey 这里记录一下工作中自己用到的selectkey方法的详细过程. po ...

随机推荐

  1. [LC] 168. Excel Sheet Column Title

    Given a positive integer, return its corresponding column title as appear in an Excel sheet. For exa ...

  2. sqlserver开窗函数改造样例

    作一个查询的性能优化. 先清缓存 DBCC DROPCLEANBUFFERS DBCC FREEPROCCACHE 原查询 前人遗留. ) ),) select @total=sum(price*pe ...

  3. java 使用poi导入Excel通用方法

    需要的jar: [XML] 纯文本查看 复制代码 ? 1 2 3 4 5 <dependency>             <groupId>org.apache.poi< ...

  4. 提高你css技能的css开发技巧

    好久没整理博客了 进来啰嗦两句   继续抄别人的博客 一.resize实现图片对比 resize的语法如下: resize:none | both | horizontal | vertical 案例 ...

  5. SWUST OJ NBA Finals(0649)

    NBA Finals(0649) Time limit(ms): 1000 Memory limit(kb): 65535 Submission: 404 Accepted: 128   Descri ...

  6. 基于seo的话 一个页面里的h1标签应该控制在多少个

    不能出现多个,一个页面只能出现一次,次数多了就会造成权重分散

  7. ehcache缓存框架之二级缓存

    ehcache.xml配置文件 <?xml version="1.0" encoding="UTF-8"?> <ehcache xmlns:x ...

  8. loadrunner通过web的post请求方法测接口 2

    模拟APP发送请求给Cloud, 一般都是用户登录后.cloud会返回登录成功的消息并且返回一个cookie给app, app下次要做一些例如设置名称之类的工作,在请求消息里面会携带返回的cookie ...

  9. ES常见问题整理

    1.集群状态red.yellow处理方法 1.red表示主分片数据不完整,通常时由于某个索引的主分片为分片unassigned,找出这个分片未分配的原因,解决即可: curl -XGET http:/ ...

  10. -scp Linux之间复制文件和目录

    scp 简介 scp是secure copy的简写,用于在Linux下进行远程拷贝文件的命令,和它类似的命令有cp,不过cp只是在本机进行拷贝不能跨服务器,而且scp传输是加密的.可能会稍微影响一下速 ...