浅谈mybatis主键生成的几种策略

 更新时间:2026年01月26日 10:23:31   作者:阿飞飞飞1234  
本文主要介绍了浅谈mybatis主键生成策略,包括使用数据库自增主键、使用UUID生成主键和使用MyBatis-Plus的雪花算法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧

使用数据库自增主键

对于支持自增主键的数据库(如 MySQL),可以在 MyBatis 的 `` 标签中设置 useGeneratedKeys="true"keyProperty 属性来自动获取并填充生成的主键值。

<insert id="insertUser" parameterType="User" useGeneratedKeys="true" keyProperty="id">
    INSERT INTO user (name, age) VALUES (#{name}, #{age})
</insert>

使用 SELECT LAST_INSERT_ID() 函数
在插入数据后,通过 SELECT LAST_INSERT_ID() 函数获取自动生成的主键值,并使用 <selectKey> 标签将其赋值给实体对象的属性。

<insert id="insertUser" parameterType="User">
    INSERT INTO user (name, age) VALUES (#{name}, #{age})
    <selectKey resultType="int" keyProperty="id" order="AFTER">
        SELECT LAST_INSERT_ID()
    </selectKey>
</insert>

使用 UUID 生成主键

对于需要唯一标识符的场景,可以在 Java 代码中生成 UUID,并将其作为主键值传入数据库。

public class User {
    private String id;
    
    public User() {
        this.id = UUID.randomUUID().toString();
    }
}

MyBatis-Plus 提供了更简便的主键生成方式,如雪花算法(Snowflake)。通过在实体类中使用 @TableId 注解并配置相应的主键策略,MyBatis-Plus 会自动填充主键 ID。

import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
@TableName("user")
public class User {
    @TableId(type = IdType.AUTO)
    private Long id;
    
    //...
}

通过以上方法,MyBatis 可以根据不同的需求自动填充主键 ID,简化开发过程。

到此这篇关于浅谈mybatis主键生成策略的文章就介绍到这了,更多相关mybatis主键生成内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • java 中迭代器的使用方法详解

    java 中迭代器的使用方法详解

    这篇文章主要介绍了java 中迭代器的使用方法详解的相关资料,希望通过本文能帮助到大家,需要的朋友可以参考下
    2017-09-09
  • Java使用线程实现异步运行的方法

    Java使用线程实现异步运行的方法

    在Java中,实现异步运行的一个常用方式是使用Thread类,这篇文章主要介绍了Java使用线程实现异步运行,需要的朋友可以参考下
    2024-07-07
  • Mybatis执行插入语句后并返回主键ID问题

    Mybatis执行插入语句后并返回主键ID问题

    这篇文章主要介绍了Mybatis执行插入语句后并返回主键ID问题,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2023-03-03
  • 一文彻底搞懂java多线程和线程池

    一文彻底搞懂java多线程和线程池

    当一个服务器接受到大量短小线程的请求时,使用线程池技术是非常合适的,它可以大大减少线程的创建和销毁次数,提高服务器的工作效率,这篇文章主要给大家介绍了如何通过一文彻底搞懂java多线程和线程池的相关资料,需要的朋友可以参考下
    2021-09-09
  • 详解Java中StringBuffer类常用方法

    详解Java中StringBuffer类常用方法

    这篇文章主要为大家介绍了java中StringBuffer类常用方法
    2016-01-01
  • 详细分析Java并发集合LinkedBlockingQueue的用法

    详细分析Java并发集合LinkedBlockingQueue的用法

    这篇文章主要介绍了详细分析Java并发集合LinkedBlockingQueue的用法,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2018-04-04
  • java堆栈类使用实例(java中stack的使用方法)

    java堆栈类使用实例(java中stack的使用方法)

    java中stack的使用方法,堆栈是一种"后进先出"(LIFO) 的数据结构, 只能在一端进行插入(称为"压栈") 或删除 (称为"出栈")数据的操作,下面看示例吧
    2013-12-12
  • Java中为什么this可以调用当前实例

    Java中为什么this可以调用当前实例

    本文主要介绍了为什么可以通过this关键字访问到当前对象呢,文中通过示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2021-07-07
  • SpringBoot绑定配置文件中变量的四种方式总结

    SpringBoot绑定配置文件中变量的四种方式总结

    当在Spring Boot中需要绑定配置文件中的变量时,可以使用以下注解:@PropertySourc,@Value,@Environment,@ConfigurationProperties,具体实现代码示例文中讲解的非常详细,需要的朋友可以参考下
    2023-11-11
  • Java使用Spire.Doc实现读取或删除Word文档属性

    Java使用Spire.Doc实现读取或删除Word文档属性

    在日常的文档处理工作中,Word 文档的属性扮演着重要角色,本文将介绍如何使用 Spire.Doc for Java 这一开源组件,以编程方式读取和删除 Word 文档中的内置属性与自定义属性,感兴趣的小伙伴可以了解下
    2026-03-03

最新评论