首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

mybatis mysql自动生成主键

MyBatis 是一款优秀的持久层框架,它支持定制化 SQL、存储过程以及高级映射。MyBatis 避免了几乎所有的 JDBC 代码和手动设置参数以及获取结果集。MyBatis 可以使用简单的 XML 或注解来配置和映射原生信息,将接口和 Java 的 POJOs(Plain Old Java Objects, 普通的 Java 对象)映射成数据库中的记录。

MySQL 是一种关系型数据库管理系统,广泛应用于 Web 应用程序中。在 MySQL 中,主键是用于唯一标识表中每一行数据的字段。

基础概念

在 MyBatis 中,可以通过配置来让 MySQL 自动生成主键。这通常涉及到两个关键的概念:

  1. 自增字段:MySQL 中的某些字段可以设置为自增(AUTO_INCREMENT),这样每当插入新记录时,该字段的值会自动增加。
  2. 主键生成策略:MyBatis 提供了多种主键生成策略,包括数据库自动生成、UUID 生成等。

相关优势

  • 简化开发:自动主键生成减少了手动设置主键值的步骤,简化了开发过程。
  • 避免冲突:自增字段可以确保每个记录的主键值都是唯一的,避免了主键冲突的问题。
  • 提高性能:对于大量数据插入的场景,自动生成主键可以提高插入性能。

类型与应用场景

  • 数据库自动生成:适用于需要连续主键值的场景,如订单号、商品编号等。在 MySQL 中,通常通过设置字段为 AUTO_INCREMENT 来实现。
  • UUID 生成:适用于不需要连续主键值,但需要全局唯一标识的场景。UUID(Universally Unique Identifier)是一种由 128 位数构成的标识符,可以保证在全球范围内的唯一性。

遇到的问题及解决方法

问题:在 MyBatis 中配置 MySQL 自动生成主键时,发现主键值没有按预期自增。

原因

  1. 数据库字段未设置为 AUTO_INCREMENT
  2. MyBatis 配置文件中的主键生成策略不正确。
  3. 插入数据时未正确指定主键字段。

解决方法

  1. 确保数据库字段已设置为 AUTO_INCREMENT。例如,在创建表时可以这样定义:
代码语言:txt
复制
CREATE TABLE `user` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `username` varchar(255) DEFAULT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
  1. 在 MyBatis 的映射文件中,确保使用了正确的主键生成策略。例如,使用数据库自动生成主键的配置如下:
代码语言:txt
复制
<insert id="insertUser" parameterType="com.example.User" useGeneratedKeys="true" keyProperty="id">
  INSERT INTO user (username) VALUES (#{username})
</insert>

注意 useGeneratedKeys="true"keyProperty="id" 的设置。

  1. 确保在插入数据时没有手动设置主键值。如果手动设置了主键值,MySQL 将不会自动生成新的主键值。

参考链接

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

mybatis批量插入自动生成主键跟日期

在网上查了很多关于mybatis-plus的批量插入,由于大多使用自增主键,不需要自动生成uuid主键网上的大部分代码为 <insert id="insertBatch" parameterType="...item.createDate}, #{item.createTime},#{item.createDateTime} 上面这种方式是必须传入列表时就<em>生成</em>...id,但有时候并不想这样做,想直接从前端传入列表就进行批量插入,而user表<em>主键</em>id又不是自增型,此时想到了一个下面这种方式。...current_date(),current_time(),current_timestamp() replace(uuid(), '-', '') 将<em>生成</em>的...uuid格式中的-替换''成32位的字符串 current_date <em>生成</em>yyyy-MM-dd日期格式 current_time <em>生成</em>HH:mm:ss时间格式 current_timestamp <em>生成</em>yyyy-MM-dd

1.4K30
  • springboot2结合mybatis拦截器实现主键自动生成

    01、前言 前阵子和朋友聊天,他说他们项目有个需求,要实现主键自动生成,不想每次新增的时候,都手动设置主键。于是我就问他,那你们数据库表设置主键自动递增不就得了。...02、前置知识 在介绍如何通过mybatis拦截器实现主键自动生成之前,我们先来梳理一些知识点 mybatis拦截器的作用 mybatis拦截器设计的初衷就是为了供用户在某些时候可以实现自己的逻辑而不必去动...mybatis的insert、update、delete都是通过这个方法,因此我们通过拦截这个这方法,来实现主键自动生成。...id字段 查看数据库 05 、总结 本文虽然是介绍mybatis拦截器实现主键自动生成,但文中更多讲解如何实现一个拦截器以及主键生成思路,并没把intercept实现主键方法贴出来。...其原因主要是主键自动生成mybatis-plus里面就有实现,其次是有思路后,大家就可以自己实现了。

    1.8K30

    springboot2结合mybatis拦截器实现主键自动生成

    前言 前阵子和朋友聊天,他说他们项目有个需求,要实现主键自动生成,不想每次新增的时候,都手动设置主键。于是我就问他,那你们数据库表设置主键自动递增不就得了。...前置知识 在介绍如何通过mybatis拦截器实现主键自动生成之前,我们先来梳理一些知识点 1、mybatis拦截器的作用 mybatis拦截器设计的初衷就是为了供用户在某些时候可以实现自己的逻辑而不必去动...mybatis的insert、update、delete都是通过这个方法,因此我们通过拦截这个这方法,来实现主键自动生成。...id字段 查看数据库 [sql语句1.png] 总结 本文虽然是介绍mybatis拦截器实现主键自动生成,但文中更多讲解如何实现一个拦截器以及主键生成思路,并没把intercept实现主键方法贴出来。...其原因主要是主键自动生成mybatis-plus里面就有实现,其次是有思路后,大家就可以自己实现了。

    2.9K20

    Mybatis-Plus3.0默认主键策略导致自动生成19位长度主键id的坑

    底层ORM框架用的是Mybatis-Plus,我寻思了一下,这看起来像是在插入数据库旧自动生成的id,导致并非默认使用MySql的自增AUTO_INCREMENT的id。...因此,决定一步步定位,先给Mybatis-Plus打印出sql日志,看下其insert语句是否自动生成了一个id,然后才插入数据库。...在做insert操作时,确实自动生成了一条长19的数字当做该条数据的id插入到MySql,导致虽然MySql表设置了自增,但被该1468844351843872769影响了,导致下一条数据自动递增值变成了...[image.png] 到这里,就确定,这个长数字的id,是在代码层次就自动生成了,最后进入对应的实体类中,发现该映射数据表的id字段,并没有显示设置对应的主键生成策略。...接下来,先验证Mybatis-Plus默认主键策略是如何的。 Mybatis-Plus项目在启动时,会对注解实体类进行初始化,然后缓存到系统Map中。

    5.4K130

    MyBatis框架点滴】——mybatis插入数据返回主键mysql、oracle)

    插入数据时返回主键的4种情况:mysql环境下主键自增、mysql环境下主键为uuid、mysql环境下主键自增、mysql环境下主键为uuid。   ...数据库为mysql ---- 主键为自增时(主键为数值类型且自增)   利用mysql的LAST_INSERT_ID()方法获取插入记录的主键,select LAST_INSERT_ID()可以在插入数据后...主键为UUID时(主键必须为字符类型)   使用mysql的方法UUID()方法获取随机的UUID作为主键,select UUID()可以在插入数据前,生成随机的UUID并通过keyProperty赋值给将要插入记录的主键...},#{userName},#{birthday},#{sex},#{address})   在上述代码中可以看到order 的属性值为BEFORE ,说明在插入之前就已经生成了...UUID时   用oracle自带的SYS_GUID()方法获得随机的GUID作为主键: <insert id="insertUser" parameterType="com.danny.<em>mybatis</em>.po.User

    2K20

    基于Saas主键生成主键id

    1.主键生成策略方式 ? 主键生成策略 2.基于Saas主键生成主键id流程 由于我们的系统时基于Saas的,因此生成主键时,需要以租户id(TenantId)为基础进行生成。...为了生成的id符合我们的租户的要求,通常都会现将租户表建好,然后基于租户表中的租户id进行主键id的生成。此时便产生基于租户id生成主键,那么怎样生成主键id呢?可以查看下图: ?...基于多租户生成方式 3.主键id生成实现的具体方式 首先需要对当前的id进行拦截操作,也即使用aop的切面Aspect对切点进行拦截,在进行新增的时候进行拦截: @Pointcut("execution...(* com.xtt..*.dao.mapper..*.insert*(..))") public void primaryKeyRule() {} 也就是说在进行主键生成时,我们拦截好需要生成主键...return current; } 从而实现主键自增的目的,从而实现基于租户id进行自增的策略。

    1.8K20

    mysql 联合主键_Mysql 创建联合主键

    Mysql 创建联合主键 2008年01月11日 星期五 下午 5:21 使用primary key (fieldlist) 比如: create table mytable ( aa int, bb...char(8), cc date, primary key (aa,bb ) ); aa,bb为联合主键 不知道是不是因为mysql(6.0)的版本问题,还是各版本都是这种情况,mysql中创建联合主键...COMMENT ‘主键编号’, `IP` … mysql修改联合主键 参考 https://blog.csdn.net/BockSong/article/details/80933477 alter...Collections是类(Class),集合操作的工具类,服务于Collection框架.它是一个算法类,提供一系列静态方法 … Spring+Mybatis基于注解整合Redis 基于这段时间折腾...redis遇到了各种问题,想着整理一下.本文主要介绍基于Spring+Mybatis以注解的形式整合Redis.废话少说,进入正题.

    8.3K20
    领券