使用Mybatis进行insert操作的时候,我们可能会需要得到刚插入的id,对于Mysql,理论上如下配置即可:
<insert id="insert" parameterType="cn.***.beans.LogObject" > <!-- 注意这里的order属性,对于mysql,设为after,对于oracle,需要设置为before, 同时,oracle中没有last_insert_id(),需要使用下面的语句来获取最新产生的id select CUSTOMER_ID_SEQ.nextval from dual --> <selectKey resultType="java.lang.Integer" order="AFTER" keyProperty="id"> SELECT LAST_INSERT_ID() AS ID </selectKey> INSERT INTO S_T_LOGS ( ID, USER_ID) VALUES ( #{id}, #{userId}) </insert>
但是,经过我的测试,发现返回的值总是1。
开始时怀疑是插入的对象包含复杂的属性(比如我们插入一个Student对象,该对象里面有个班级类型的属性class,我们在数据库中通常保存的是一个classId,所以,在mapper文件中可能会这样写#{class.id}),类似这样的配置可能会触发一次查询,导致我们的insert语句和selectKey语句之间有其他的select语句,从而导致select last_insert_id()返回值总是为1,因为在mybatis打印的sql语句中,发现insert和select last_insert_id()之间有一些select语句,但是在mysql中测试后发现insert后面的select语句并不影响selecct last_insert_id()的返回值。
其实,insert的返回值还是代表啦受影响的行数,而插入对象的主键已经赋给了插入的对象 ,我们通常是调用sqlSession的insert方法来进行插入操作,同时会传递一个要插入的对象,但是主键属性为空如下所示:
sqlSession.insert("com.xxx.xxx.save", o);
假如我们的配置没有问题,那么该方法执行后,如果在这行代码后面去打印o的主键属性,就会发现 该属性已经有值。
相关推荐
这种情况下,XML 文件中的自定义 `insert` 方法会覆盖 MP 的通用方法,使得 MP 的自动处理主键返回的功能失效。为了解决这个问题,我们需要检查并删除 XML 文件中这个自定义的 `insert` 语句,确保不再执行这个方法...
在Mybatis中,批量插入数据可以通过使用foreach语句来实现,而返回主键可以通过使用useGeneratedKeys和keyProperty两个属性来实现。下面是一个示例代码: 首先,在持久层的Mapper文件中,我们需要定义一个批量插入...
这样,在执行 insert 语句时,MyBatis 将自动将插入的主键 ID 返回到对象的 `userId` 属性中。 Oracle 用法 在 Oracle 中,情况变得稍微复杂一些。因为 Oracle 不支持自增长主键,所以我们不能使用 `...
在"Mybatis案例一所用建表语句"中,我们可以推测这是一个关于创建数据库表的示例。在MySQL中,建表语句(CREATE TABLE)用于定义表的结构,包括字段名、数据类型、约束条件等。例如: ```sql CREATE TABLE `User` ...
本篇文章将深入探讨MyBatis中`insert`元素的使用,通过实例Demo来阐述其核心概念和应用场景。 1. MyBatis映射器接口与XML映射文件 在MyBatis中,映射器接口是Java类,它定义了数据库操作的方法。而XML映射文件则...
在这个例子中,`userMapper`是基于`User`实体的`BaseMapper`实例,`insert`方法会执行SQL插入语句并将数据保存到数据库中。 接下来,我们讨论如何获取插入操作后的主键值。MybatisPlus为自增主键提供了自动获取主...
MyBatis在处理MySQL时,只需在插入语句中忽略主键字段即可,如下所示: ```xml <sql id='TABLE_NAME'>TEST_USER <insert id="insert" parameterType="User"> insert into <include refid="TABLE_NAME" /> ...
本文将详细介绍 MyBatis 中插入返回主键代码实例的实现方法。 在使用 MyBatis 进行数据插入时,需要使用 `selectKey` 元素来获取插入后的主键值。`selectKey` 元素可以在插入语句之前或之后执行,具体的实现方法取...
在Mybatis中,`insertOrUpdate`操作是一种将数据插入数据库,如果存在相同的唯一标识则更新已有数据的方法。这种操作在数据库编程中非常实用,因为它允许开发者以简洁的方式处理增删改查(CRUD)操作。在MySQL中,...
在插入语句中,通过设置`useGeneratedKeys="true"`,告诉MyBatis获取新生成的主键。同时,`keyProperty="userId"`指定将生成的主键值设置到实体类User的userId属性上。以下是配置示例: ```xml <insert id=...
首先,我们需要在MyBatis的Mapper接口中定义一个插入并返回主键ID的方法。这里我们以一个`UserDao`接口为例,定义一个`insertAndGetId`方法: ```java public interface UserDao { public int insertAndGetId(User...
Mybatis自定义插件生成...通过拦截器拦截Mybatis的insert语句,通过自定义注解获取到主键,并为该主键赋值雪花ID,插入数据库中。 2、技术架构 项目总体技术选型 SpringBoot2.1.7 + Mybatis + Maven3.5.4 + Mysql + lom
在本文中,我们将详细介绍MyBatis插入数据返回主键的实现方法。 Service层实现 在Service层中,我们可以使用MyBatis提供的Mapper接口来实现插入数据的功能。例如,我们可以定义一个`addUser`方法,用于插入用户...
在MyBatis中,批量插入数据是一种提高性能的有效方式,特别是在处理大量数据时。本文将详细介绍如何在MyBatis中实现批量插入,并通过一个具体的示例来说明。批量插入操作通常涉及以下关键步骤: 1. **实体类定义**...
在MyBatis这个流行的Java持久层框架中,处理自增主键的值通常涉及到插入数据后如何获取新生成的ID。下面将详细阐述MyBatis如何实现这一功能。 1. **自增主键的原理**: 自增主键通常在关系型数据库如MySQL、...
因为`getGeneratedKeys`通常只能获取到最后一个插入操作生成的键,所以在一个包含多个`INSERT`语句的批处理中,如果存在`ON DUPLICATE KEY UPDATE`,返回的主键可能与预期不符。特别是,如果更新操作改变了主键列的...
而tk.mybatis则是MyBatis的扩展,提供了一些增强功能,便于在Spring Boot环境中使用MyBatis进行数据库操作。本教程将深入探讨如何在Spring Boot项目中集成tk.mybatis通用Mapper,实现高效的数据访问。 首先,我们...
1.Configuration.xml 是 mybatis 用来建立 sessionFactory 用的,里面主要包含了数据库连接相关东西,还有 java 类所对应的别名,比如 <typeAlias alias="User" type="com.yihaomen.mybatis.model.User"/> 这个别名...
在MyBatis 3.2.6版本中,主要提供了两种方式,这两种方式都适用于MySQL 5.5数据库,因为MySQL支持返回自增主键的特性。下面是这两种方法的详细解释: 方法1:利用`useGeneratedKeys`和`keyProperty`属性 在XML映射...