当前位置: 首页 > news >正文

Java获取自增主键ID值

附注:相信很多小伙伴在学习mybatis的时候,会有疑问,在插入数据后,怎么获取主键的id值,后续利用这个ID值,应用在其他方面,比如前端。本文根据如何获取自增主键ID值,提出相应的解决办法。

背景:

在开发过程中,我们有时会用到自增主键的值来进行一些操作,但是当主键id是自增的情况下,添加一条记录时,其主键id是不能使用的,发现主键id的值为null,应该如何解决呢?

解决方案:useGeneratedKeys=”true” keyProperty=”id”

xml文件:

    <insert id="insertUser" useGeneratedKeys="true" keyProperty="id">
        insert into t_user values (null,#{username}, #{password}, #{age}, #{sex}, #{email})
    </insert>

MyBatis层: 

package com.mapper;

import com.pojo.User;

import java.util.List;
import java.util.Map;

public interface SelectMapper {
        void insertUser(User user);
}

Service层:
 

 @Test
    public void insertUser() throws Exception{
        InputStream resourceAsStream = Resources.getResourceAsStream("mybatis-config.xml");
        SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(resourceAsStream);
        SqlSession sqlSession = sqlSessionFactory.openSession(true);
        SelectMapper selectMapper = sqlSession.getMapper(SelectMapper.class);
        User user = new User(null, "ton", "123", 23, "男", "123@321.com");
        selectMapper.insertUser(user);
        System.out.println(user);
    }

useGeneratedKeys=”true” 

含义:设置是否使用JDBC的getGenereatedKeys方法获取主键并赋值到keyProperty设置的领域模型属性中。Mybatis 配置文件 useGeneratedKeys 参数只针对 insert 语句生效,默认为 false。当设置为 true 时,表示如果插入的表以自增列为主键,则允许 JDBC 支持自动生成主键,并可将自动生成的主键返回,通过这个设置可以解决在主键自增的情况下通过实体的getter方法获取主键

另外,要注意的是,上面返回的主键是会映射到原来实体类中的,实体类中的参数会自动填充id 属性(由 keyProperty=“id” 指定),所以我们需要的id值绝不是sql注入返回的id值,因为sql注入返回的是受影响的行数。

keyproperty指明数据库中返回的主键id给实体类中的哪个属性

注意:这两个属性主要是在主键是自增的情况下,添加成功后可以直接使用主键值,其中keyProperty的值是对象的属性值不是数据库表中的字段名

看到这了,还不能点个赞吗?呜呜呜~

相关文章:

  • 【算法入门图论】【模板】拓扑排序|【模板】单源最短路2 |最小生成树
  • 第31讲:MySQL事务的并发问题以及事务的隔离级别
  • JavaScript 2 JavaScript 简介
  • 【目标检测】YOLOv5在Android上的部署
  • 攻防世界WEB练习 | easyphp
  • Java数据结构:栈与综合计算器的实现(图解+完整代码)
  • dolphinscheduler 3.0.1数据质量
  • 【vue后台管理系统】基于Vue+Element-UI+ECharts开发通用管理后台(上)
  • 【产品新体验】CSDN. 云IDE体验与使用教程
  • 毕业设计 基于51单片机老人防跌倒GSM短信报警系统
  • 实验十四:雨滴传感器实验
  • 【面试官说实现一个顺序表,但听到要求后我沉默了】
  • jquery导航图片全屏滚动、首页全屏轮播图,各式相册
  • 相对于java,C++中的那些神奇语法
  • 元宇宙系列之AI虚拟人:“人”潮汹涌 探路未来
  • “大数据应用场景”之隔壁老王(连载四)
  • 0x05 Python数据分析,Anaconda八斩刀
  • Android Studio:GIT提交项目到远程仓库
  • android图片蒙层
  • angular组件开发
  • Cookie 在前端中的实践
  • css的样式优先级
  • Git初体验
  • JavaScript 一些 DOM 的知识点
  • Python3爬取英雄联盟英雄皮肤大图
  • ucore操作系统实验笔记 - 重新理解中断
  • 短视频宝贝=慢?阿里巴巴工程师这样秒开短视频
  • 关于使用markdown的方法(引自CSDN教程)
  • 计算机常识 - 收藏集 - 掘金
  • 开源SQL-on-Hadoop系统一览
  • 每天10道Java面试题,跟我走,offer有!
  • 如何进阶一名有竞争力的程序员?
  • 什么软件可以提取视频中的音频制作成手机铃声
  • 文本多行溢出显示...之最后一行不到行尾的解决
  • 详解NodeJs流之一
  • NLPIR智能语义技术让大数据挖掘更简单
  • #大学#套接字
  • (1)无线电失控保护(二)
  • (Bean工厂的后处理器入门)学习Spring的第七天
  • (二)linux使用docker容器运行mysql
  • (附源码)springboot 智能停车场系统 毕业设计065415
  • (附源码)springboot宠物医疗服务网站 毕业设计688413
  • (蓝桥杯每日一题)平方末尾及补充(常用的字符串函数功能)
  • (三)Honghu Cloud云架构一定时调度平台
  • (转)fock函数详解
  • (转)Linq学习笔记
  • (转)LINQ之路
  • (转)visual stdio 书签功能介绍
  • (转)大型网站架构演变和知识体系
  • .NET WebClient 类下载部分文件会错误?可能是解压缩的锅
  • .NET8 动态添加定时任务(CRON Expression, Whatever)
  • .net操作Excel出错解决
  • .Net接口调试与案例
  • .sdf和.msp文件读取
  • [ 2222 ]http://e.eqxiu.com/s/wJMf15Ku