Mybatis插入数据后返回主键
添加记录后获取主键ID,这是一个很常见的需求,特别是在一次前端调用中需要插入多个表的场景。
除了添加单条记录时获取主键值,有时候可能需要获取批量添加记录时各记录的主键值,MyBatis从3.3.1版本开始支持批量添加记录并返回各记录主键字段值。
一、获取新添加记录主键字段值
注意: 在MyBatis中添加操作返回的是记录数并非记录主键id。
如果需要获取新添加记录的主键值,需要在执行添加操作之后,直接读取Java对象的主键属性。
Integer rows = sqlSession.getMapper(UserMapper.class).insertUser(user);
System.out.println("rows = " + rows); // 添加操作返回记录数
System.out.println("id = " + user.getId()); // 执行添加操作之后通过Java对象获取主键属性值
二、在映射器中配置获取记录主键值
1.xml映射器
在定义xml映射器时设置属性useGeneratedKeys值为true,并分别指定属性keyProperty和keyColumn为对应的数据库记录主键字段与Java对象的主键属性。
1.1 插入单条记录
<mapper namespace="com.dafeng.dao.mapper">
<!-- 插入数据:返回记录主键id值 -->
<insert id="insertUser" parameterType="com.dafeng.model.User" useGeneratedKeys="true" keyProperty="id" keyColumn="id" >
insert into user(name,age,create_time,update_time) values(#{name},#{age},now(),now())
</insert>
</mapper>
1.2 插入多条记录
<!-- 批量添加数据,并返回主键字段 -->
<insert id="insertBatchUser" useGeneratedKeys="true" keyProperty="id">
INSERT INTO user(name,age,create_time,update_time) VALUES
<foreach collection="list" separator="," item="u">
(#{u.name},#{u.age},now(),now())
</foreach>
</insert>
2.接口映射器
在接口映射器中通过注解@Options分别设置参数useGeneratedKeys,keyProperty,keyColumn值
2.1 插入单条记录
// 返回主键字段id值
@Options(useGeneratedKeys = true, keyProperty = "id", keyColumn = "id")
@Insert("insert into user(name,age,create_time,update_time) values(#{name},#{age},now(),now())")
Integer insertUser(User user);
2.2 插入多条记录
如果希望执行批量添加并返回各记录主键字段值,只能在xml映射器中实现,在接口映射器中无法做到。
Mybatis插入数据后返回主键的更多相关文章
- Mybatis插入数据后返回主键id
有时候使用mybatis插入数据后,需要用到记录在数据库中的自增id,可以利用keyProperty来返回,赋值给实体类中的指定字段. 单条记录插入并返回 First, if your databas ...
- mybatis 插入数据时返回主键
在使用MyBatis做持久层时,insert语句默认是不返回记录的主键值,而是返回插入的记录条数:显然,假如主键是你生成后插入的,自然你已经有主键了,显然不需要我们再去获得,所以我们这里处理的是当主键 ...
- Laravel 5 插入数据后返回主键ID
方法一: $info = DB::table('表名')->insertGetId(['imgName' => $fileName]);//图片名入库后返回添加数据行的主键ID 方法二:( ...
- mybatis插入数据并返回主键(oracle)
通常我们执行一个inser语句,即使有返回,也只是会返回影响了多少条数据 @insert("insert into t_user (id,name) values (suser.nextva ...
- mybatis 插入数据并返回主键值
<insert id="insert" parameterType="com.pojo.TSubject" useGeneratedKeys=" ...
- mysql数据库使用mybatis 插入数据时返回主键
为了体现题目,特指的是mysql,先贴上代码: <insert id="saveBizProdOrderDetail" useGeneratedKeys="true ...
- mybatis的插入数据后的主键获取
为什么要在插入数据后获取主键:当有一个订单表和订单详情表,当插入订单表的数据后,需要在订单详情表插入该订单的具体购物情况,订单详情表需要的一个列是订单表的主键或者订单ID.(通俗讲:A表的主键是B表的 ...
- mybatis插入数据后返回自增主键ID详解
1.场景介绍: 开发过程中我们经常性的会用到许多的中间表,用于数据之间的对应和关联.这个时候我们关联最多的就是ID,我们在一张表中插入数据后级联增加到关联表中.我们熟知的mybatis在插入数据后 ...
- MyBatis-Plus插入值后返回主键
LZ做练手设计的时候有这样一个订单需求,先插入订单表数据(t_order),再写入订单详情表(t_orderDetail),详情表需要有一个与t_order的外键约束 t_order ( oid ...
- Java MyBatis insert数据库数据后返回主键
<selectKey keyProperty="id" resultType="java.lang.Long" order="AFTER&quo ...
随机推荐
- 递推(C语言)
文章目录 1.斐波那契数列 2.太波那契数列 3.二维递推问题 4.实战 4.1 力扣509 斐波那契数 4.2 力扣70 爬楼梯 4.3 力扣119 杨辉三角|| 递推最通俗的理解就是数列,递推和数 ...
- house of banana
条件: 1.任意地址写一个堆地址 2.触发exit函数 3.能泄露堆地址和基地址 原理: 伪造 fini_array 赋值用到的结构体 从而控制程序exit时的程序执行流 ld.so 中存在 _rtl ...
- Python--json_tools用法
安装 pip install json_tools 使用 输出导读: 上面的输出显示的是b相对于a的变化: 1) b和a都有键'rd',但是b相对a键'rd'的值发生了变化,由原来的yanan变为Ya ...
- Httprunner生成Allure格式HTML报告
一.httprunner v2.x版本的报告 最近组内其他同学使用httprunner做接口自动化,之前没有接触过httprunner,发现httprunner相比pytest和unittest有自己 ...
- 5.1 Vim及其安装
通过前面的学习我们知道,Linux 系统中"一切皆文件",因此当我们在命令行下更改文件内容时,不可避免地要用到文本编辑器. 作为一名 Linux 初学者,你必须熟练掌握 Linux ...
- switch、case语句的问题
switch.case语句: 点击查看代码 int state = 1; switch(state) { case 1: { //状态1执行的程序 } case 2: { //状态2执行的程序 } d ...
- python库asyncio的概念和用法
python 库 asyncio asyncio 是 Python 的标准库之一,用于编写异步应用程序.它提供了事件循环.协程.任务和其他工具来处理并发操作.以下是一些关于 asyncio 的基本概念 ...
- k8s-部署应用
Deployment # app-deployment.yaml apiVersion: apps/v1 kind: Deployment metadata: name: app-web spec: ...
- SQL排序分组
--按某一字段分组取最大(小)值所在行的数据(2007-10-23于浙江杭州) /* 数据如下: name val memo a 2 a2(a的第二个值) a 1 a1--a的第一个值 a 3 a3: ...
- Hook框架之Frida
Frida是一款轻量级HOOK框架,可用于多平台上,例如android.windows.ios等. frida分为两部分,服务端运行在目标机上,通过注入进程的方式来实现劫持应用函数,另一部分运行 ...