`
shidan66
  • 浏览: 65429 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

Mybatis中insert语句返回主键总是1

 
阅读更多

        使用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的主键属性,就会发现 该属性已经有值。

 

分享到:
评论

相关推荐

    详解mybatis plus使用insert没有返回主键的处理

    这种情况下,XML 文件中的自定义 `insert` 方法会覆盖 MP 的通用方法,使得 MP 的自动处理主键返回的功能失效。为了解决这个问题,我们需要检查并删除 XML 文件中这个自定义的 `insert` 语句,确保不再执行这个方法...

    Mybatis批量插入数据返回主键的实现

    在Mybatis中,批量插入数据可以通过使用foreach语句来实现,而返回主键可以通过使用useGeneratedKeys和keyProperty两个属性来实现。下面是一个示例代码: 首先,在持久层的Mapper文件中,我们需要定义一个批量插入...

    MyBatis在insert插入操作时返回主键ID的配置(推荐)

    这样,在执行 insert 语句时,MyBatis 将自动将插入的主键 ID 返回到对象的 `userId` 属性中。 Oracle 用法 在 Oracle 中,情况变得稍微复杂一些。因为 Oracle 不支持自增长主键,所以我们不能使用 `...

    Mybatis案例一所用建表语句

    在"Mybatis案例一所用建表语句"中,我们可以推测这是一个关于创建数据库表的示例。在MySQL中,建表语句(CREATE TABLE)用于定义表的结构,包括字段名、数据类型、约束条件等。例如: ```sql CREATE TABLE `User` ...

    MyBatis_insert

    本篇文章将深入探讨MyBatis中`insert`元素的使用,通过实例Demo来阐述其核心概念和应用场景。 1. MyBatis映射器接口与XML映射文件 在MyBatis中,映射器接口是Java类,它定义了数据库操作的方法。而XML映射文件则...

    MybatisPlus中插入数据获取主键值示例代码

    在这个例子中,`userMapper`是基于`User`实体的`BaseMapper`实例,`insert`方法会执行SQL插入语句并将数据保存到数据库中。 接下来,我们讨论如何获取插入操作后的主键值。MybatisPlus为自增主键提供了自动获取主...

    mybatis自增主键文档

    MyBatis在处理MySQL时,只需在插入语句中忽略主键字段即可,如下所示: ```xml &lt;sql id='TABLE_NAME'&gt;TEST_USER &lt;insert id="insert" parameterType="User"&gt; insert into &lt;include refid="TABLE_NAME" /&gt; ...

    mybatis insert返回主键代码实例

    本文将详细介绍 MyBatis 中插入返回主键代码实例的实现方法。 在使用 MyBatis 进行数据插入时,需要使用 `selectKey` 元素来获取插入后的主键值。`selectKey` 元素可以在插入语句之前或之后执行,具体的实现方法取...

    Mybatis 中的insertOrUpdate操作

    在Mybatis中,`insertOrUpdate`操作是一种将数据插入数据库,如果存在相同的唯一标识则更新已有数据的方法。这种操作在数据库编程中非常实用,因为它允许开发者以简洁的方式处理增删改查(CRUD)操作。在MySQL中,...

    详解Java MyBatis 插入数据库返回主键

    在插入语句中,通过设置`useGeneratedKeys="true"`,告诉MyBatis获取新生成的主键。同时,`keyProperty="userId"`指定将生成的主键值设置到实体类User的userId属性上。以下是配置示例: ```xml &lt;insert id=...

    MyBatis+MySQL 返回插入的主键ID的方法

    首先,我们需要在MyBatis的Mapper接口中定义一个插入并返回主键ID的方法。这里我们以一个`UserDao`接口为例,定义一个`insertAndGetId`方法: ```java public interface UserDao { public int insertAndGetId(User...

    spring-boot-mybatis-interceptor:mybatis自定义主键插件,通过该插件生成分布式唯一雪花ID作为数据库表的主键

    Mybatis自定义插件生成...通过拦截器拦截Mybatis的insert语句,通过自定义注解获取到主键,并为该主键赋值雪花ID,插入数据库中。 2、技术架构 项目总体技术选型 SpringBoot2.1.7 + Mybatis + Maven3.5.4 + Mysql + lom

    MyBatis插入数据返回主键的介绍

    在本文中,我们将详细介绍MyBatis插入数据返回主键的实现方法。 Service层实现 在Service层中,我们可以使用MyBatis提供的Mapper接口来实现插入数据的功能。例如,我们可以定义一个`addUser`方法,用于插入用户...

    MyBatis批量插入(insert)数据操作

    在MyBatis中,批量插入数据是一种提高性能的有效方式,特别是在处理大量数据时。本文将详细介绍如何在MyBatis中实现批量插入,并通过一个具体的示例来说明。批量插入操作通常涉及以下关键步骤: 1. **实体类定义**...

    mybatis获取自增主键的值

    在MyBatis这个流行的Java持久层框架中,处理自增主键的值通常涉及到插入数据后如何获取新生成的ID。下面将详细阐述MyBatis如何实现这一功能。 1. **自增主键的原理**: 自增主键通常在关系型数据库如MySQL、...

    Mybatis使用useGeneratedKeys获取自增主键的方法

    因为`getGeneratedKeys`通常只能获取到最后一个插入操作生成的键,所以在一个包含多个`INSERT`语句的批处理中,如果存在`ON DUPLICATE KEY UPDATE`,返回的主键可能与预期不符。特别是,如果更新操作改变了主键列的...

    spring-boot+tk.mybatis通用mapper

    而tk.mybatis则是MyBatis的扩展,提供了一些增强功能,便于在Spring Boot环境中使用MyBatis进行数据库操作。本教程将深入探讨如何在Spring Boot项目中集成tk.mybatis通用Mapper,实现高效的数据访问。 首先,我们...

    springmybatis

    1.Configuration.xml 是 mybatis 用来建立 sessionFactory 用的,里面主要包含了数据库连接相关东西,还有 java 类所对应的别名,比如 &lt;typeAlias alias="User" type="com.yihaomen.mybatis.model.User"/&gt; 这个别名...

    MyBatis插入时获取自增主键方法

    在MyBatis 3.2.6版本中,主要提供了两种方式,这两种方式都适用于MySQL 5.5数据库,因为MySQL支持返回自增主键的特性。下面是这两种方法的详细解释: 方法1:利用`useGeneratedKeys`和`keyProperty`属性 在XML映射...

Global site tag (gtag.js) - Google Analytics