首页 > 其他分享 >Mybatis使用SELECT LAST_INSERT_ID()返回0问题避坑

Mybatis使用SELECT LAST_INSERT_ID()返回0问题避坑

时间:2023-10-15 21:11:20浏览次数:36  
标签:INSERT LAST Param 主键 避坑 ID SELECT

Mybatis使用SELECT LAST_INSERT_ID()返回0问题避坑

SELECT LAST_INSERT_ID()用于返回最后插入表中数据的主键值,一般用于表主键自增且需要用到该自增的主键值的情况

<insert id="insertOrder" parameterType="com.example.bobosapce.Entity.WorkOrder">
        INSERT INTO WORKORDER(administratorid,category,createtime,userid,status) VALUES(#{administratorid},#{category},#{createtime},#{userid},2)
        <selectKey resultType="java.lang.Integer" order="AFTER" keyProperty="orderid">
            SELECT LAST_INSERT_ID()
        </selectKey>
    </insert>
  • parameterType:对应方法传入的参数类型,这里为实体类
  • <SelectKey>标签即用来实现SELECT LAST_INSERT_ID()
  • resultType:主键类型
  • order:AFTER 表示 SELECT LAST_INSERT_ID() 在insert执行之后执行,多用与自增主键
    BEFORE 表示 SELECT LAST_INSERT_ID() 在insert执行之前执行,这样的话就拿不到主键了,适合那种主键不是自增的类型
  • keyProperty:对应传入参数的主键,SELECT LAST_INSERT_ID()执行后会将得到的主键值存入实体类对应的主键属性名

附注解版:

@Insert("INSERT INTO WORKORDER(administratorid,category,createtime,userid,status) VALUES(#{administratorid},#{category},#{createtime},#{userid},2)")
    @SelectKey(statement = "SELECT LAST_INSERT_ID()", keyProperty = "orderid", resultType = Integer.class, before = false)
    int insertOrder(WorkOrder workOrder);

踩坑!

  • 出于习惯,Mapper中方法无论单参还是多参,都会加上@Param注解,在网上查阅相关博客得到在使用<SelectKey>标签情况下,加上@Param注解会使<SelectKey>失效的结论,导致每次都会得到新增的主键值为0的情况,所以单参情况下去掉@Param注解可以解决问题,但是经过多次实测,发现@Param并不是不能存在,只要占位符中参数名和keyProperty与@Param完全匹配即可,以注解形式为例:
@Insert("INSERT INTO WORKORDER(administratorid,category,createtime,userid,status) VALUES(#{workorder.administratorid},#{workorder.category},#{workorder.createtime},#{workorder.userid},2)")//占位符对应@Param
    @SelectKey(statement = "SELECT LAST_INSERT_ID()", keyProperty = "workorder.orderid", resultType = Integer.class, before = false)//keyProperty对应@Param
    int insertOrder(@Param("workorder")WorkOrder workorder);
  • xml配置同理

标签:INSERT,LAST,Param,主键,避坑,ID,SELECT
From: https://www.cnblogs.com/chuimber/p/17766192.html

相关文章

  • elasticsearch安装dynamic-synonym插件
    今天就来和大家讲讲如何在es中安装dynamic-synonym插件,首先我们需要去github上下载与es版本对应的插件,一般github上基本都是本地词库和远程文本词库的,在gitee上可以找到采用数据库作为词库的源码,大致思路就是修改一些参数配置,然后自己创建一个表作为同义词词库,最后将打包好的jar包......
  • kubernetes client-go 避坑
    原文链接:https://www.cnblogs.com/gaorong/p/16939111.htmlinformercache中的数据是只读的,任何修改都先deepcopyinformercache中的数据是只读的,任何修改都应该先deepcopy出来,然后提交apiserver,利用apiserverinformerevent重新同步回cache中。如果直接修改cache中的数据......
  • elasticsearch通过Java class类的@Setting和@Mapping来定义索引index
    今天就来和大家讲讲如何将es索引中的mapping和setting在索引index和class联系起来,其实在这个问题也困扰我好久了,一直没有解决,在elasticsearch7.x版本的时候貌似好像可以用request在程序中来建立索引,像Stringindex=“{“mapping”:...}”之类的操作,干起来比较复杂,在elasticsear......
  • elasticsearch
    lucenesolressolr和es都是基于lucene官网: https://www.elastic.co/cn/elasticsearch/ 倒排序索引lucene是类库solr基于lucene ......
  • Debian12安装elasticsearch实践及问题解决方案
    一、安装安装其实很简单,直接上官网链接:下载地址,官网提供了所有安装方式,总一款适合你。我的目标系统是Debian12,包管理是apt-get,所以就以这个为示例,仅供参考。1、先选择需要安装的版本2、导入ElasticsearchPGP密钥wget-qO-https://artifacts.elastic.co/GPG-KEY-elastic......
  • elasticsearch_exporter监控elasticsearch
    1、官网下载elasticsearch_exporter的安装包,地址如下:```bashhttps://github.com/prometheus-community/elasticsearch_exporter```2、配置成服务```bashvim/etc/systemd/system/elasticsearch_exporter.service###写入如下内容[Unit]Description=elasticsearch_exporterAfte......
  • ElasticSearch集群搭建
    2.1ES集群的好处es天然支持集群模式,其好处主要有两个:1.能够增大系统的容量,如内存、磁盘,使得es集群可以支持PB级的数据;2.能够提高系统可用性,即使部分节点停止服务,整个集群依然可以正常服务;2.2ES如何组集群单节点ES,如下图所示;如果单节点出现问题,服务就不可用了,如何新增一个es......
  • skywalking elasticsearch 版本匹配问题
     进入skywalking历史下载页面:https://archive.apache.org/dist/skywalking/8.6.0/  开始正常一整个流程应该有skywalking-oap-server、skywalking-oap-ui、es、skywalking-agent.jar;中间最大的问题是版本,然后是配置;个人建议直接用官方给的文档里面的docker镜像作为部署......
  • K8s部署轻量级日志收集系统EFK(elasticsear + filebeat + kibana)
    目录K8s部署EFK(elasticsearch+filebeat+kibana)日志收集一.准备镜像二.搭建Elasticsearch+kibana1.在可执行kubectl命令的服务器准备安装的yml文件2.在elasticsearch-kibana目录下创建配置文件elasticsearch.yml3.创建kibana配置文件kibana.yml4.在k8s中创建elasticsearch和k......
  • ElasticSearch集群处于yellow状态处理
    一般思路:1、查看集群状态curl-XGET-u{username}:{password}-s$prefix/_cat/health?v2、查看节点状态curl-XGET-u{username}:{password}-s$prefix/_cat/nodes?v3、查看索引状态curl-XGET-u{username}:{password}-s$prefix/_cat/indices?v4、查看原......