MyBatis Insert插入数据返回自增长主键值

教程分享 > Java教程 (678) 2024-04-19 09:20:39

MyBatis Insert插入数据返回主键的几种模式支持,包括@Insert注解,mapper.xml sql语句。

mybatis insert插入数据返回id前置条件

id必须是数字类型,且设置了自增长

 

Mybatis @Insert  注解方式返回主键值

@Insert(insert into user values(#{id},#{name},#{age})
@SelectKey(statement = "select last_insert_id() from dual", before = false, resultType = Interger.class, keyColumn = "id", keyProperty = "user.id")
int add(@Param("user") User user);

在mapper层用注解的方式,用@SelectKey注解

@SelectKey里面属性含义:

  • resultType:查询结果的类型
  • keyProperty:把查询的值赋给谁;
  • statement:查找最后一个插入的id;
  • keyColumn:查询的是哪一列;
  • before:是否在插入之前执行,
  • id在insert语句插入之后才会生成id,所以要在插入之后执行,所以此处before=false。

该方式关键点:@SelectKey 注解的配置和使用

Mybatis xml通过 selectKey 

该方法理论和上方注解相似,以mapper xml方式实现,参考:

    <insert id="insert" parameterType="com.***.User">
        <selectKey resultType="java.lang.Integer" order="AFTER" keyProperty="user.id">
            select LAST_INSERT_ID()
        </selectKey>
        insert into user
        <trim prefix="(" suffix=")" suffixOverrides=",">
            <if test="user.id != -1">
                id,
            </if>
            <if test="user.name!= null and user.name!=''">
                user,
            </if>
            <if test="user.age!= null">
                age,
            </if>
        </trim>
        <trim prefix="values (" suffix=")" suffixOverrides=",">
            <if test="attachment.id != -1">
                #{user.id,jdbcType=BIGINT},
            </if>
            <if test="user.name!= null and user.name!=''">
                #{user.name,jdbcType=VARCHAR},
            </if>
            <if test="user.age!= null">
                #{user.age,jdbcType=INTEGER},
            </if>
        </trim>
    </insert>

该方式关键点:多了个<selectKey>查询

Mybatis xml 通过useGeneratedKeys和keyProperty【xml推荐使用】

    <insert id="insert" parameterType="com.***.User" useGeneratedKeys="true" keyProperty="user.id"  keyColumn="id">
        insert into user
        <trim prefix="(" suffix=")" suffixOverrides=",">
            <if test="user.id != -1">
                id,
            </if>
            <if test="user.name!= null and user.name!=''">
                name,
            </if>
            <if test="user.age!= null">
                age,
            </if>
        </trim>
        <trim prefix="values (" suffix=")" suffixOverrides=",">
            <if test="user.id != -1">
                #{user.id,jdbcType=BIGINT},
            </if>
            <if test="user.name!= null and user.name!=''">
                #{user.name,jdbcType=VARCHAR},
            </if>
            <if test="user.age!= null">
                #{user.age,jdbcType=INTEGER},
            </if>
        </trim>
    </insert>

该方式关键点:useGeneratedKeys 配置为true,keyProperty指定自增长主键字段名称

 

搞定

 

 

https://www.leftso.com/article/2404161028052869.html

相关文章
MyBatis Insert插入数据返回主键的几种模式支持,包括@Insert注解,mapper.xml sql语句。mybatis insert插入数据返回i
mybatis plus 自增长主键如何获取注意在model对象里面配置以下注解即可在调用save()方法后通过对象get获取@TableId(type = IdType.AUTO) BigI...
spring boot mybatis 整合使用讲解介绍,spring boot与MyBatis的使用讲解介绍。spring boot mybatis xml mapper方式的入门和通过一个简...
MyBatis generator 表名/字段名下划线转驼峰,Spring Boot 2.0 整合MyBatis generator 表名/字段名下划线转驼峰 idea上的配置
spring boot框架整合MyBatis数据库暂时选用MySQL
引言    通过之前spring boot mybatis 整合的讲解: spring boot mybaties整合  (spring boot mybaties 整合 基于Java注解方式写...
idea Mybatis generator插件的配置和使用,在eclipse中,我们可以在eclipse的插件市场安装一个Mybatis generator的插件。然后对Mybatis gen...
mybatis plus 逻辑删除使用说明全局逻辑值配置,application.properties# 逻辑已删除值(默认为 1) mybatis-plus.global-config.db...
       本文主要讲解在使用MyBatis 中通过mybaties generator生成基本操作代码,然后通过 MyBatis mapper 继承机制来解决某些情况下经常改表导致改mapp...
mybatis事物访问数据库的一级缓存和二级缓存和刷新缓存
某些情况下,我们使用mybaties时需要使用IN(虽然IN数据多了效率不高,但是少量还是可以用得)条件查询,这时候我们就需要传递参数了,下面是mybaties处理IN条件得参数使用方法首先Ma...
MyBatis like参数写法 and a.link like CONCAT(CONCAT('%', #{params.link}), '%')
接上一篇:mybatis Interceptor拦截器实现自定义扩展查询兼容mybatis plus-左搜 (leftso.com)这里进行自定义分页查询扩展,基于mybatis plus,同样...
mybatis 开启自动驼峰转换默认情况下,mybatis需要在mapper xml文件中编写一堆的ResultMap来对应Java Bean和数据库字段的关系。在开启驼峰转换后就不需要resu...