MyBatis+MySQL 返回插入的主键ID的方法
需求:使用MyBatis往MySQL数据库中插入一条记录后,需要返回该条记录的自增主键值。
方法:在mapper中指定keyProperty属性,示例如下:
<insert id="insertAndGetId" useGeneratedKeys="true" keyProperty="userId" parameterType="com.chenzhou.mybatis.User"> insert into user(userName,password,comment) values(#{userName},#{password},#{comment}) </insert>
如上所示,我们在insert中指定了keyProperty=”userId”,其中userId代表插入的User对象的主键属性。
User.java
public class User { private int userId; private String userName; private String password; private String comment; //setter and getter }
UserDao.java
public interface UserDao { public int insertAndGetId(User user); }
测试:
User user = new User(); user.setUserName("chenzhou"); user.setPassword("xxxx"); user.setComment("测试插入数据返回主键功能"); System.out.println("插入前主键为:"+user.getUserId()); userDao.insertAndGetId(user);//插入操作 System.out.println("插入后主键为:"+user.getUserId());
输出:
插入前主键为:0
插入后主键为:15
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持我们。
相关推荐
-
MyBatis中insert操作返回主键的实现方法
在使用MyBatis做持久层时,insert语句默认是不返回记录的主键值,而是返回插入的记录条数:如果业务层需要得到记录的主键时,可以通过配置的方式来完成这个功能 针对Sequence主键而言,在执行insert sql前必须指定一个主键值给要插入的记录,如Oracle.DB2,可以采用如下配置方式: <insert id="add" parameterType="vo.Category"> <selectKey resultType="
-
详解Java MyBatis 插入数据库返回主键
最近在搞一个电商系统中由于业务需求,需要在插入一条产品信息后返回产品Id,刚开始遇到一些坑,这里做下笔记,以防今后忘记. 类似下面这段代码一样获取插入后的主键 User user = new User(); user.setUserName("chenzhou"); user.setPassword("xxxx"); user.setComment("测试插入数据返回主键功能"); System.out.println("插入前主键为:
-
MyBatis+MySQL 返回插入的主键ID的方法
需求:使用MyBatis往MySQL数据库中插入一条记录后,需要返回该条记录的自增主键值. 方法:在mapper中指定keyProperty属性,示例如下: <insert id="insertAndGetId" useGeneratedKeys="true" keyProperty="userId" parameterType="com.chenzhou.mybatis.User"> insert into us
-
Mybatis批量插入并返回主键id的方法
目录 场景 错误 分析原因 排查问题 场景 在做商城的时候,sku表进行了拆分,sku的基本信息以及sku的库存表.因为库存会经常的变动,会导致行锁. 这里就是新增的时候,因为在新增商品的时候,会有多条sku的数据进行批量的插入,那么有批量插入sku基本信息以及批量插入sku的库存信息. 其中,就需要批量插入sku的基本信息的时候,返回主键id,这就能够在sku批量插入库存信息的时候能够插入skuId: 错误 nested exception is org.apache.ibatis.execu
-
详解mybatis插入数据后返回自增主键ID的问题
1.场景介绍: 开发过程中我们经常性的会用到许多的中间表,用于数据之间的对应和关联.这个时候我们关联最多的就是ID,我们在一张表中插入数据后级联增加到关联表中.我们熟知的mybatis在插入数据后返回的是插入成功的条数,那么这个时候我们想要得到相应的这条新增数据的ID,该怎么办呢? 2.插入数据返回自增主键ID方法(一) 在映射器中配置获取记录主键值xml映射: 在xml中定义useGeneratedKeys为true,返回主键id的值,keyProperty和keyColumn分别代表数据库
-
Mybatis返回插入的主键问题解决方案
MyBatis添加记录后获取主键ID,这是一个很常见的需求.这个需求有分为两种情况:(1)添加单条记录时获取主键值:(2)获取批量添加记录时各记录的主键值. 备注:MyBatis从3.3.1版本开始支持批量添加记录并返回各记录主键字段值. 1.添加单一记录时返回主键ID(方法一) 此种方法主要思路是:使用<insert>标签或者@Insert注解的属性:useGeneratedKeys.keyProperty.keyColumn.下面分别以xml映射器和注解映射器分别详细阐述一下. 2.添加单
-
Mysql更新自增主键id遇到的问题
目录 为什么要更新自增id 问题 如何解决 本是一个自己知道的问题,还是差点踩坑(差点忘了,还好上线前整理上线点时想起来了),特此记录下来 为什么要更新自增id 我是因为历史业务上的坑,导致必须更新一批id,且为了避免冲突需要将id扩大多少倍进行更新,因为我这个表的数据数量不高,属于高读低写的情况,所以就简单的扩大了1000 问题 MySQL中如果我们把自增主键更新为更大的值(例如现在自增id最大值是1000,你更新id=49这个记录到id=1049),MySQL并不会把表的自增值修改为更新后的
-
mybatis中insert主键ID获取和多参数传递的示例代码
一.插入数据主键ID获取 一般我们在做业务开发时,经常会遇到插入一条数据并使用到插入数据的ID情况.如果先插入在查询的话需要多一次sql查询,未免效率太低.因此mybatis也有提供插入数据并返回主键ID的方式.如下 1.Insert/update 1.1.属性解释 keyProperty selectKey 语句结果应该被设置的目标属性.如果希望得到多个生成的列,也可以是逗号分隔的属性名称列表. resultType 结果的类型.MyBatis 通常可以推算出来,但是为了更加确定写上也不会有什
-
Mybatis返回插入主键id的方法
在mapper的xml文件中配置 useGeneratedKeys 以及 keyProperty 返回Id即可 <insert id="insertObject" useGeneratedKeys="true" keyProperty="id" parameterType="www.change.tm.model.Orders" > insert into orders <trim prefix="
-
解决Spring或SpringBoot开启事务以后无法返回自增主键的问题
Spring或SpringBoot开启事务以后无法返回自增主键 场景:保存订单和订单详情,订单详情需要订单id,数据库中的订单表是自增主键,开启事务后,导致订单主键无法返回 1.开启事务前(以下代码只是样例,实际可能无法运行) OrderMapper.xml配置 <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapp
-
MyBatis在insert插入操作时返回主键ID的配置(推荐)
很多时候,在向数据库插入数据时,需要保留插入数据的id,以便进行后续的update操作或者将id存入其他表作为外键. 但是,在默认情况下,insert操作返回的是一个int值,并且不是表示主键id,而是表示当前SQL语句影响的行数... 接下来,我们看看MyBatis如何在使用MySQL和Oracle做insert插入操作时将返回的id绑定到对象中. MySQL用法: <insert id="insert" parameterType="com.test.User&qu
-
Mybatis批量插入返回插入成功后的主键id操作
我们都知道Mybatis在插入单条数据的时候有两种方式返回自增主键: 1.对于支持生成自增主键的数据库:增加 useGenerateKeys和keyProperty ,<insert>标签属性. 2.不支持生成自增主键的数据库:使用<selectKey>. 但是怎么对批量插入数据返回自增主键的解决方式网上看到的还是比较少,至少百度的结果比较少. Mybatis官网资料提供如下: First, if your database supports auto-generated key
随机推荐
- JavaScript中正则表达式的概念与应用
- 使用angular写一个hello world
- Go语言的GOPATH与工作目录详解
- SQLServer中汇总功能的使用GROUPING,ROLLUP和CUBE
- 防止绝大部份网页病毒的经典方法
- Windows下使用命令实现文件换行符替换
- javascript的tab切换原理与效果实现方法
- ThinkPHP 3.2.2实现事务操作的方法
- C# 对象持久化详解
- Bootstrap精简教程中秋大放送
- 仅几行iOS代码限制TextField输入长度
- PHP制作3D扇形统计图以及对图片进行缩放操作实例
- 用javascript对一个json数组深度赋值示例
- jQuery结合HTML5制作的爱心树表白动画
- C/C++字符串查找函数全面了解
- C语言之复杂链表的复制方法(图示详解)
- Android实现拍照、录像、录音代码范例
- django项目中使用手机号登录的实例代码
- python修改FTP服务器上的文件名
- 微信小程序实现时间预约功能