mybatis返回自增主键踩坑记

背景

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 INTO …

尝试方案

怀疑配置不生效,使用

select @@IDENTITY as id

仍然不行,再换一种

仍然不行。

调试

通过在调用插入操作后,不小心查看了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());

}

Original: https://www.cnblogs.com/davidwang456/p/12522864.html
Author: 一天不进步,就是退步
Title: mybatis返回自增主键踩坑记

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/543427/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

  • 华为暑期实习 通用软件开发 面经

    华为暑期实习 通用软件开发工程师 数据存储与机器视觉 面经 机试 7.6 第一题 字符串匹配 给五行英文句子,找出来其中的网址,网址以http或https开头,以com结尾,不要重…

    Java 2023年6月5日
    0109
  • Nginx log 日志分割

    Nginx日志不处理的话,会一直追加,文件会变得很大 方法1:给日志文件名加上日期 推荐 log_format access-upstream ‘$time_iso8601|$re…

    Java 2023年6月14日
    084
  • K8S 使用deploy部署nginx

    K8S 使用deployment 部署nginx服务 deploy文件如下: [root@k8s-master ~]# cat deploy.yaml apiVersion: ap…

    Java 2023年5月30日
    054
  • 最新MongoDB安装,学习笔记

    MongoDB 导读 作者还在陆续更新中,如果喜欢作者的笔记,觉得可以学习到有帮助,后面会不断学习新内容,就点个关注吧,如果觉得文章有关注可以点个赞,谢谢; 官网:https://…

    Java 2023年6月9日
    073
  • Java基础语法(三)

    Java基础语法(三) 不积跬步,无以至千里;不积小流,无以成江海。 ——荀子《劝学》 Java基础语法(三) – 十六、方法 十七、命令行传参(扩展) 十八、可变参数…

    Java 2023年6月9日
    093
  • javaScript知识大全(基础)!!

    定义方法:即把函数放在对象里面,对象只有属性和方法 var a={ name:"111", birth:2000, age:function (){ var n…

    Java 2023年6月9日
    057
  • Centos下安装Maven私服Nexus

    dockers安装Nexus,指定访问路径(默认为/;在使用Nginx做反向代理时,最好指定访问路径),并在容器外持久化数据,避免Nexus容器升级后数据丢失。 安装并启动 doc…

    Java 2023年6月5日
    0111
  • zk权限模块

    1 zk的权限控制 2 概述: 3 zk类&#x4F3…

    Java 2023年6月8日
    097
  • equals && deepEquals

    equals && deepEquals 本文分为以下几个部分 equals deepEquals 首先说明:这里说的 equals 是 java.util.Arr…

    Java 2023年6月5日
    074
  • Docker简介及安装

    Docker 是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的镜像中,然后发布到任何流行的 Linux或Windows操作系统的机器上,也可以实现虚拟化…

    Java 2023年6月8日
    070
  • JAVA正则表达式校验qq号码

    /* 校验qq号码* 要求必须是5-15位* 0不能开头* 必须都是数字/ (1)使用正则表达式校验qq号码 (2)方式2 Original: https://www.cnblog…

    Java 2023年6月5日
    085
  • mysql

    一:什么情况下设置了索引但无法使用1.以%开头的like语句,模糊匹配2.or语句前后没有同时使用索引3.数据类型出现隐式转化 二:优化数据库的方法1.选取最适用的字段属性2.使用…

    Java 2023年6月5日
    0107
  • 设计模式——行为型设计模式

    行为型设计模式 针对对象之间的交互 解释器模式 java中用的很。JVM编译的时候就是对我们写的代码进行了解释操作;数据库SQL语句亦是如此 解释器:对语言进行解释,根据不同语义来…

    Java 2023年6月14日
    088
  • Halo 开源项目学习(一):项目启动

    项目简介 Halo 是一个优秀的开源博客发布应用,在 GitHub 上广受好评,正好最近在练习写博客,借此记录一下学习 Halo 的过程。 项目下载 前提设置 导入项目 因为 Ha…

    Java 2023年6月9日
    069
  • 打造适合自己的知识库

    终生学习,终生教育。 对于知识工作者来说,知识库是持续支撑整个职业生涯的重要基础。程序员,算是半个知识工作者工种。 知识库可以看做是海量资源库的本地缓存。它的特点是:少而精要,重点…

    Java 2023年6月9日
    075
  • 多线程(多线程实现方式二【Runnable接口实现】)

    Runnable接口实现多线程 测试类 继承类Thread–实现卖电影票 利用Runnable接口实现电影票的售票 解决线程安全问题—-解决卖电影票程序问题…

    Java 2023年6月5日
    089
亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球